C# Roslyn检查字段声明是否已分配给
我正在编写一个应用程序,它将密钥转换为使用RESX文件中的资源。此代码以前使用过局部变量:C# Roslyn检查字段声明是否已分配给,c#,roslyn,C#,Roslyn,我正在编写一个应用程序,它将密钥转换为使用RESX文件中的资源。此代码以前使用过局部变量: public static void AnalyzeConstDeclaration(SyntaxNodeAnalysisContext context) { var fieldDeclaration = (FieldDeclarationSyntax)context.Node; if (false == IsValidFieldDeclaration(context, fieldDec
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时,我收到一个错误:
其他信息:StateMentExpression不是StatementSyntax或ExpressionSyntax
理想情况下,我们需要查看是否有人在声明之外写入了此变量。数据流通过分析单个方法中的执行顺序来工作。
这对于类级别的字段没有意义 相反,您应该使用一个简单的语法访问者(或
SymbolFinder
)在整个类中搜索字段的赋值
您可能还需要检查它是否曾经作为ref
参数传递