Roslyn - 类型表达式的TypedConstant.Value类型

时间:2017-07-19 16:43:03

标签: c# roslyn typeof roslyn-code-analysis

如果我有一些带有typeof表达式的源代码,例如,在属性中,我应该将TypedConstant的{​​{1}}属性转换为什么?我无法在任何地方找到这些信息。

例如,我有以下源代码:

Value

我希望在我的分析器中查看class FooAttribute : Attribute { public FooAttribute(Type type) {} } [Foo(typeof(int))] class Bar {} 的参数:

Foo

1 个答案:

答案 0 :(得分:1)

它将成为[DiagnosticAnalyzer(LanguageNames.CSharp)] class MyAnalyser : DiagnosticAnalyzer { public override void Initialize(AnalysisContext context) { context.RegisterCompilationAction(LookAtFooArg); } private void LookAtFooArg(CompilationAnalysisContext context) { TypedConstant argumentTypedConstant = context.Compilation .GetTypeByMetadataName("Bar") .GetAttributes() .Single() .ConstructorArguments .Single(); // Value here is typed as an object. What should I cast it to? var typeOfExpressionValue = argumentTypedConstant.Value; } } 。我通过良好的猜测来学习这一点。

INamedTypeSymbol