Roslyn:检查未初始化的局部变量

时间:2017-12-10 02:29:55

标签: c# .net roslyn code-analysis

使用Roslyn,如何检查C#变量是否未初始化?例如假设我有以下代码:

void M()
{
    CancellationToken l1;
    N();
}

我的ILocalSymboll1相对应。如何检查此变量是否在语法树中的特定位置初始化,例如,对应于N();的文本中的索引?

编辑:如果将方法扩展到参数符号也会有所帮助,例如

void M(out CancellationToken p1)
{
    N(); // How do I tell p1 is uninitialized here?
}

编辑:我根据Roslyn团队中某些人的建议尝试了数据流分析API:https://github.com/dotnet/roslyn/issues/23688。但是,它不起作用。我已经尝试了!analysis.DataFlowsIn.Contains(symbol)以及!analysis.AlwaysAssigned.Contains(symbol)(其中analysisDataFlowAnalysis个对象)但是他们都给出了漏报,说这个变量未被初始化

0 个答案:

没有答案