私はRoslyn-CTPを少し実験しています。ITypeSymbolからTypeSyntaxを取得
現在、var
を具体的なタイプに置き換えようとしています。
var i=1;
はなるはずです:
int i=1;
が推測されたタイプは簡単です考え出します。しかし、この部分がセマンティックモデルで起こるので、私はITypeSymbol
を得ます。置換は構文モデルで行われるので、TypeSyntax
が必要です。私は肥大化した名前(global::System.Int32
)を望んでいないので、変換はコンテキストに依存します(using
、ネストされたタイプなど)。
Roslynに所属しているVisualスタジオのバージョンでは、すでにこの機能が「簡易型の名前」クイックフィックスに含まれていますが、この変換を簡単に行うことができないサンプルを見ています。私が今使っているケビンPilch氏-Bissonの答えに基づいて
:
var location = document.GetSyntaxTree().GetLocation(node);
string name = variableType.ToMinimalDisplayString((Location)location, (SemanticModel)document.GetSemanticModel());
ToMinimalDisplayString
はCommonSyntaxTree
から入手することができる場所。
追加の合併症はdocument.GetSemanticModel()
とCommonSyntaxTree.GetLocation
のみインターフェイスを返す一方ToMinimalDisplayString
は、クラスLocation
とSemanticModel
を必要とすることです。
私は単にクラスにキャストすることで作業しましたが、これは今のところうまくいくようです。
ちょっと、クラスがC#固有で、インターフェイスが言語に依存していないようです。それはforeach
にvar
のために動作しませんhttps://github.com/CodesInChaos/Roslyn
が、私はそれが現在のロザリンのビルドの制限だ疑い:
私はgithubの上で作業バージョンをアップロードしました。
Re:あなたの最後のステートメント:CTPビルドが完了する前に 'foreach'で' var'を完全に実装していませんでした。ごめんなさい。 –