私はRoslyn CTPを使用していますが、クラス内の変数の値に値があるかどうかを調べようとしています。私は誰かがBinaryExpressionSyntaxを使って文字列が何も ""と等しいかどうかを判断するときを検出しようとしていると言います。例えばRoslynを使用して変数の潜在的な価値を判断する方法はありますか?
:
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のルールでは大いに役立つと思います。
ありがとう、私は定数サンプルからこれを覚えていたはずです...欠けているものは、単にタイプミスです。 AnalyzeRegionDataFlowの変数に書き込まれた値を判断する方法はありますか?私はそれが常に割り当てられていることがわかります、私はまた "WrittenInside"でそれを見ることができます...シンタックスツリーに戻ってスワップし、それをナビゲートして潜在的な価値を見極める必要がありますか? – Jay
@Jay、ええ、私はそれがあなたの唯一の選択だと思います。しかし、実際には可能な値を実際には決定できないので、それをすることはあまり意味がありません。 – svick
svick、ありがとう。私は同意しますが、これは単なる楽しみのためです。とにかく試してみます:) – Jay