C# Roslyn:正在检查未初始化的局部变量
使用Roslyn,如何检查C#变量是否未初始化?e、 g.假设我有以下代码:C# Roslyn:正在检查未初始化的局部变量,c#,.net,roslyn,code-analysis,C#,.net,Roslyn,Code Analysis,使用Roslyn,如何检查C#变量是否未初始化?e、 g.假设我有以下代码: void M() { CancellationToken l1; N(); } 我的ILocalSymbol对应于l1。如何检查此变量是否在语法树中的特定位置初始化,例如,对应于N()的文本中的索引 编辑:如果该方法也扩展到参数符号,例如 void M(out CancellationToken p1) { N(); // How do I tell p1 is uninitialized h
void M()
{
CancellationToken l1;
N();
}
我的ILocalSymbol
对应于l1
。如何检查此变量是否在语法树中的特定位置初始化,例如,对应于N()的文本中的索引代码>
编辑:如果该方法也扩展到参数符号,例如
void M(out CancellationToken p1)
{
N(); // How do I tell p1 is uninitialized here?
}
编辑:根据Roslyn团队中一些人的建议,我尝试了数据流分析API:。但是,它不起作用。我试过!analysis.DataFlowsIn.包含(符号)
以及!analysis.AlwaysAssigned.Contains(symbol)
(其中analysis
是一个DataFlowAnalysis
对象),但它们都给出了错误否定,表示变量未初始化,而变量未初始化。什么意思?如何检查?我的意思是我可以看一下,告诉你l1
是未初始化的。或者运行编译器,看看它是否抛出错误…?@ErikPhilips我问的是Roslyn,一个C#静态分析工具。你试过数据流分析API吗?你有问题吗?如果是,请询问有关API的更具体问题。如果没有,请尝试数据流分析API,看看您喜欢它。@EricLippert查看我更新的帖子。既然你有Roslyn的专业知识,你能帮我吗?如果API给出了错误的否定,并且你正确地使用了它,那么这就是实现中的一个bug;和Roslyn团队讨论一下。我已经五年多没在那里工作了。