使用Roslyn,如何检查C#变量是否未初始化?例如假设我有以下代码:
void M()
{
CancellationToken l1;
N();
}
我的ILocalSymbol
与l1
相对应。如何检查此变量是否在语法树中的特定位置初始化,例如,对应于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)
(其中analysis
是DataFlowAnalysis
个对象)但是他们都给出了漏报,说这个变量未被初始化