C# Roslyn检查字段声明是否已分配给

C# Roslyn检查字段声明是否已分配给,c#,roslyn,C#,Roslyn,我正在编写一个应用程序,它将密钥转换为使用RESX文件中的资源。此代码以前使用过局部变量: public static void AnalyzeConstDeclaration(SyntaxNodeAnalysisContext context) { var fieldDeclaration = (FieldDeclarationSyntax)context.Node; if (false == IsValidFieldDeclaration(context, fieldDec

我正在编写一个应用程序,它将密钥转换为使用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时,我收到一个错误:

其他信息:StateMentExpression不是StatementSyntax或ExpressionSyntax


理想情况下,我们需要查看是否有人在声明之外写入了此变量。

数据流通过分析单个方法中的执行顺序来工作。
这对于类级别的字段没有意义

相反,您应该使用一个简单的语法访问者(或
SymbolFinder
)在整个类中搜索字段的赋值

您可能还需要检查它是否曾经作为
ref
参数传递