5

Roslyn の 2012 年 9 月の CTP を使用しています。

ac# コード ドキュメントで未解決の型を取得する最もエレガントな方法は何ですか? 例えば。型 Guid には System 名前空間が必要です。現在、私は次のようなものを持っています:

            var semanticModel = (SemanticModel)document.GetSemanticModel();
            var tree = (SyntaxTree)document.GetSyntaxTree();

            //get unresolved types
            var unresolvedTypes = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>()
                .Where(x => semanticModel.GetSymbolInfo(x).Symbol == null);

IdentifierNameSyntax と GetSymbolInfo を使用するのは正しいですか?

また、 GetSymbolInfoGetTypeInfoの違いは何ですか。どちらも私には非常に似ています。

4

1 に答える 1

9

ここにいくつかの質問があります。

Q:使用するのは正しいIdentifierNameSyntaxですか?
A:SimpleNameSyntaxジェネリック型の解決を処理するために使用することをお勧めします。SimpleNameSyntaxまた、すべての要素を見たくない場合もあります。実際にはタイプコンテキストにないものに対して誤検知が発生します(たとえば、次のようなコードを想像してください)var x = Console();

GetSymbolInfoQ: nullを使用してチェックするのは正しいですか?
A:はい、これはここで確認するのが正しいことです。

GetSymbolInfoQ:との違いは何GetTypeInfoですか?
A:型名を表す構文の場合、違いはありません。ただし、任意の式GetSymbolInfoの場合、式の特定のシンボル(たとえば、メソッド呼び出し、インデクサーアクセス、配列アクセス、オーバーロードされた演算子など)をGetTypeInfo表し、結果の型を表します(これにより、追加する場合に生成する型がわかります。式の宣言)。たとえば、InvocationExpressionSyntaxmyString.GetHashCode()」の場合を考えてみましょう。 GetSymbolInfoのメソッドシンボルを返しますがGetHashCode()、 。GetTypeInfoを返しSystem.Int32ます。

于 2012-12-12T16:33:19.830 に答える