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)
执行此操作的常规模式是使用Compilation.GetTypeByMetadataName(),然后将其ITypeSymbol与您从中获取的模式进行比较SemanticModel.GetTypeInfo().
注意:确保用于.Equals比较ITypeSymbol实例,因为其中一些实例不保证引用标识.
请参阅:http://source.roslyn.io/Roslyn.Diagnostics.Analyzers/R/fee46febeb0be269.html,以获取执行此操作的分析器示例.
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |