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

Roslyn - Type of TypedConstant.Value for a typeof expression

如果我有一些带有 typeof 表达式的源代码,例如,在属性中,我应该将 TypedConstantValue 属性 转换成什么?我无法在任何地方找到记录的此信息。

比如我有如下源码:

class FooAttribute : Attribute
{
    public FooAttribute(Type type) {}
}

[Foo(typeof(int))]
class Bar {}

我想在我的分析器中查看 Foo 的参数:

[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。我通过老式的猜测了解到这一点。

var typeOfExpressionValue = (INamedTypeSymbol)argumentTypedConstant.Value;