我想让c#编译器在编译时检查更多。例如:
public class Foo
{
public bool condition;
public void CheckCondition()
{
if(condition) {
#warning SomeCompilerWarning
}
}
}
static void Main()
{
var foo = new Foo();
foo.condition = true;
foo.CheckCondition();
}
这个平凡的序列应该能够在编译时被检测到。我意识到#warning
是一个pre处理器指令。我希望上面以某种方式生成一个警告。是否有任何方法可以稍微扩展对琐碎序列的编译时检查,或者自定义扩展是唯一的方法?
澄清:
- 我要求不使用预处理器的替代方案。以上是我想实现的概念示例。
- 我希望编译器发出一个类似于示例的警告。这个例子行不通。这只是作为一个说明。 在不使用任何预处理器指令的情况下,是否有其他方法可以编写自定义分析器来实现示例中的行为?
#warning
只是一个例子,说明我希望发生什么。不,即使技术上可行,我也怀疑这是可取的。在可行和正确的情况下,这种做法的数量微乎其微;当它发出错误警告,或者在它应该发出警告的时候却没有发出警告时,这种情况的数量会使任何这样的效用相形见绌,因此:它的害处大于用处。在一般情况下,即使在同一方法的连续行之间,对象状态也不是很可预测,因为通常有不相关的副作用、并发性、反射、不安全访问和许多其他需要处理的事情——包括"停止问题"。
这种情况只能在运行时有效且可靠地检测到,所以:执行。
除了编写自定义分析器之外,没有其他选择。