2016-08-18 5 views
0

私は、次のコードを持っています"DateTime"型のフィールドを持つ匿名型の列挙型として推論することができます。しかし、それは失敗し、ErrorTypeを示します。ロザリンセマンティックモデルからGetTypeInfoのは、「VAR」の種類を見つけるために失敗した

Visual Studioでは、次の図のように表示されます。

enter image description here

私はロスリンからこれを取得するために使用していたコードは次のとおりです。

public void GetType(SyntaxTree tree) 
{ 
      var Mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location); 
      var compilation = CSharpCompilation.Create("RoslynVar", syntaxTrees: new[] { tree }, references: new[] { Mscorlib }); 


      VariableDeclarationSyntax variable = ... // get the relevant variable 
      TypeInfo symbolInfo = semanticModel.GetTypeInfo(variable.Type); 
} 
+0

は、あなたがこれを行うために使用されるコードを表示することができます:

また、あなたはvar query =の後の部分があるVariableDeclaratorSyntax.Initializer、からITypeSymbolより具体的に得ることができますか? –

+1

セマンティックモデルの診断を確認してください。たぶんあなたはSystem.Coreへの参照がないでしょう – user2697817

答えて

2

あなたがvariable.Typeから取得varTypeSyntaxquery変数の意味的な情報を取得する必要はありません)var query宣言の一部です。あなたのケースでは、これは次のようになります。

var typeSymbol = 
    ((ILocalSymbol)semanticModel.GetDeclaredSymbol(variable.Variables[0])).Type; 

あなたはTypeInfoITypeSymbolどのusaful一部を取得します。

var typeSymbol = 
    semanticModel.GetOperation(variable.Variables[0].Initializer.Value).Type; 
関連する問題