如果我有一些带有typeof
表达式的源代码,例如,在属性中,我应该将TypedConstant
的{{1}}属性转换为什么?我无法在任何地方找到这些信息。
例如,我有以下源代码:
Value
我希望在我的分析器中查看class FooAttribute : Attribute
{
public FooAttribute(Type type) {}
}
[Foo(typeof(int))]
class Bar {}
的参数:
Foo
答案 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