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を取得し、SemanticとSyntaxを使用して左側と右側の両方を調べることができますが、可能な値を追跡するデバッガーには何も表示されません。私はこれが大ざっぱになる可能性があることを知っています例:
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ルールで多くの役割を果たすと思います。