2015-11-03 51 views
8

SemanticModel.GetSymbolInfoを使用しているときに失敗してしまいますが、使用すると失敗します。 SemanticModel.GetDeclaredSymbol。SemanticModel.GetSymbolInfoとSemanticModel.GetDeclaredSymbolを使用する場合

私は例のベローズを添付しました。

セマンティックモデルを得るための方法の一つ一つを使用するときに、私の質問は?

public class Class1 
{ 
    public System.String MyString { get; set; } 

    public static void Main() 
    { 
     var str = 
      @" 
      namespace ClassLibrary31 
      { 
       public class Class1 
       { 
        public System.String MyString { get; set; } 
       } 
      }"; 

     var syntaxTree = SyntaxFactory.ParseSyntaxTree(str); 

     MetadataReference[] metadataReferenceReferences = new MetadataReference[] 
     { 
      MetadataReference.CreateFromFile(typeof(object).Assembly.Location), 
     }; 

     var compilation = 
      CSharpCompilation 
       .Create("TraceFluent", 
        new[] {syntaxTree}, 
        options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, warningLevel:1), 
        references: metadataReferenceReferences 
       ); 

     var temp = compilation.Emit("temp"); 
     var semanticModel = compilation.GetSemanticModel(syntaxTree, true); 

     PropertyDeclarationSyntax propertySyntaxNode = 
      syntaxTree.GetRoot() 
       .DescendantNodes() 
       .OfType<PropertyDeclarationSyntax>() 
       .First(); 



     //var qu = propertySyntaxNode.q 

     //var symbolInfo = semanticModel.GetDeclaredSymbol(propertySyntaxNode); 
     var symbol = semanticModel.GetDeclaredSymbol(propertySyntaxNode) as IPropertySymbol; 
     var typeInfo = semanticModel.GetTypeInfo(propertySyntaxNode).Type; 
    } 
} 

答えて

5

私は、特定の構文ノードのシンボルを取得し、そのツリーの意味モデルを取得しないことを意味すると思います。

一般に、宣言(クラス、プロパティ、メソッドなど)の基になるシンボルを取得する場合は、GetDeclaredSymbolを使用する必要があります。内部的には、GetSymbolInfothisメソッドを呼び出します。そこで扱われるさまざまなケースを見ることができます。宣言は処理されないため、GetDeclaredSymbolを使用する必要がある場合は、その内部をhereと見なすことができます。 「そうしないと、構文の作品は、その名前に `DeclarationSyntax`が含まれている場合は、` GetDeclaredSymbol() ``を使用GetSymbolInfo() `を使用します。」:私が役に立ったと評価してきたルールを:

+0

ちょうど展開します。 (これは100%正確ではありませんが、かなり近いです) – JoshVarty

関連する問題