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

问题描述 投票:5回答:1

在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(), ""));
    }
} 
c# visual-studio-2015 roslyn
1个回答
5
投票

进行此操作的正常模式是使用Compilation.GetTypeByMetadataName(),然后将该ITypeSymbol与您从SemanticModel.GetTypeInfo()返回的那个进行比较。

注意:请确保使用.Equals来比较ITypeSymbol实例,因为其中某些实例不能保证引用身份。

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

© www.soinside.com 2019 - 2024. All rights reserved.