检查变量类型以进行代码分析

Joh*_*ner 5 c# roslyn visual-studio-2015

在Roslyn代码分析器中检查变量类型的正确方法是什么?我正在注册一个ObjectCreationExpressionSyntax节点,我可以得到类型,但我不确定正确的方法来检查它是我关心的类型.

我找到了一种方法来检查显示字符串,但我想知道是否有更正确的方法来实现这一点.例如,这是试图检查ArrayList创建的代码.

private static void SyntaxValidator(SyntaxNodeAnalysisContext context)
{
    var creation = (ObjectCreationExpressionSyntax)context.Node;

    var variableType = creation.Type as IdentifierNameSyntax;

    if (variableType == null)
        return;

    var variableTypeInfo = context.SemanticModel.GetTypeInfo(context.Node);

    if (variableTypeInfo.Type != null && variableTypeInfo.Type.ToDisplayString().Equals("System.Collections.ArrayList"))
    {
        context.ReportDiagnostic(Diagnostic.Create(Rule, creations.GetLocation(), ""));
    }
} 
Run Code Online (Sandbox Code Playgroud)

Kev*_*lch 5

执行此操作的常规模式是使用Compilation.GetTypeByMetadataName(),然后将其ITypeSymbol与您从中获取的模式进行比较SemanticModel.GetTypeInfo().

注意:确保用于.Equals比较ITypeSymbol实例,因为其中一些实例不保证引用标识.

请参阅:http://source.roslyn.io/Roslyn.Diagnostics.Analyzers/R/fee46febeb0be269.html,以获取执行此操作的分析器示例.