我正在编写一个应用程序,用于转换密钥以使用RESX文件中的资源。此代码在使用之前使用局部变量:
public static void AnalyzeConstDeclaration(SyntaxNodeAnalysisContext context)
{
var fieldDeclaration = (FieldDeclarationSyntax)context.Node;
if (false == IsValidFieldDeclaration(context, fieldDeclaration))
{
return;
}
var firstVariable = fieldDeclaration.Declaration.Variables.FirstOrDefault();
var dataFlowAnalysis = context.SemanticModel.AnalyzeDataFlow(firstVariable);
var variableSymbol = context.SemanticModel.GetDeclaredSymbol(firstVariable);
if (dataFlowAnalysis.WrittenOutside.Contains(variableSymbol))
{
return;
}
var firstSymbol = context.SemanticModel.GetDeclaredSymbol(firstVariable);
context.ReportDiagnostic(Diagnostic.Create(Rule, context.Node.GetLocation(), firstSymbol.Name));
}
但是当我尝试获取dataFlowAnalysis时收到错误:
其他信息:statementOrExpression不是StatementSyntax或ExpressionSyntax。
理想情况下,只需要查看是否有人在声明之外写了这个变量。
答案 0 :(得分:3)
DataFlow通过分析单个方法中的执行顺序来工作 它对于类级字段没有意义。
相反,您应该使用简单的语法访问者(或SymbolFinder
)来搜索整个班级,以便对该字段进行分配。
您可能还想检查它是否作为ref
参数传递。