在类似以下示例的代码中,我希望能够静态分析代码以确定传递给SpecialFunction()的可能值列表。
SpecialFunction(5); // A
int x = 5;
SpecialFunction(x); // B
int x = 5;
x = condition ? 3 : 19;
SpecialFunction(x); // C
我已经能够将C#解析成抽象语法树,我已经可以处理像A这样的情况,我猜我可以追踪初始值分配以猜测B的情况,但是像C这样简单的情况似乎很快就会变得复杂。
我几乎可以确定在所有情况下我们都无法静态地解决x,并且这是可以接受的。我想知道尝试解决它的策略,以及识别无法解决的方法。如果需要包括类级别字段和多线程怎么办?闭包?如果我们知道对于所有可能值的集合X中,|X| < 50,是否有帮助?
根据@Vladimir Perevalov的建议,如何将Pex中的概念应用于查找目标代码点的可能值(而不是Pex似乎发现的导致未检查异常情况的代码路径和值)?
IEnumerable<int>GetValuesForx(...)
呢? - Tigran