我正在使用 Roslyn CTP,我正在尝试确定类中变量的值是否具有值。假设我正在尝试检测某人何时使用 BinaryExpressionSyntax 来确定字符串是否等于无“”。
例如:
private void StringLiteral(string a)
{
if (a == "") //flagged because we do not see a explicit set of 'a'
{
Console.WriteLine("Empty String");
}
a="42";
if (a == "") //not flagged because 'a' has been set
{
Console.WriteLine("Empty String");
}
}
我可以获得 BinaryExpressionSyntax 并使用语义和语法检查左侧和右侧,但我在调试器中看不到任何跟踪可能值的内容。我知道这可能会变得粗略,例如:
private void BooleanTest(string a, bool b)
{
if (b)
{
a="";
}
if (!b)
{
a="42";
}
if (a == "") // Maybe 'a' is set maybe it isn't so we will probably not flag this one
{
Console.WriteLine("What Do I Do?");
}
}
Roslyn CTP 是否可以确定是否已在变量上设置了潜在值?我认为这将在 StyleCOp/FxCop 规则中发挥很大作用。