Ich verwende die Roslyn CTP und ich versuche festzustellen, ob der Wert einer Variablen in einer Klasse einen Wert hat. Sagen wir, ich versuche zu erkennen, wenn jemand eine BinaryExpressionSyntax verwendet, um festzustellen, ob eine Zeichenkette gleich null ist.Gibt es eine Möglichkeit, den potenziellen Wert einer Variablen mit Roslyn zu bestimmen?
Zum Beispiel:
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");
}
}
Ich kann die BinaryExpressionSyntax bekommen und untersuchen sowohl die linke und rechte Seite Semantic und Syntax verwenden, aber ich habe nichts im Debugger sehen, die den möglichen Wert verfolgt. Ich weiß, das skizzenhaft beispiels bekommen konnte .:
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?");
}
}
Ist es möglich, mit dem Roslyn CTP zu bestimmen, ob ein potentieller Wert auf eine Variable eingestellt? Ich würde denken, dass dies viel in den StyleCOp/FxCop-Regeln ins Spiel kommen würde.
danke, ich hätte mich daran erinnern müssen von der konstanten Probe ... Das fehlende andere war nur ein Tippfehler. Gibt es eine Möglichkeit zu bestimmen, welcher Wert in der AnalyzeRegionDataFlow in die Variable geschrieben wurde? Ich kann sehen, dass es immer zugewiesen ist, ich kann es auch in der "Insert-Datei" sehen ... Muss ich jetzt zurück zum Syntaxbaum wechseln und navigieren, um zu sehen, was der potenzielle Wert ist? – Jay
@Jay, ja, ich denke das ist deine einzige Option. Aber es macht wahrscheinlich nicht viel Sinn, auch nur das zu tun, weil man die möglichen Werte eigentlich nur in den einfachsten Fällen bestimmen kann. – svick
svick, danke nochmal. Ich stimme zu, aber das ist nur zum Spaß, also werde ich es trotzdem versuchen :) – Jay