【发布时间】:2016-08-05 02:22:24
【问题描述】:
有什么办法可以检测到这个代码sn-p?
DateTime dt = DateTime.Now;
if (dt == null) {
MessageBox.Show("Imposible with datetime!!!");
}
在我们的项目中,我们检测到在 Release 编译中,整个 if 被删除,因为 DateTime 和 null 之间的比较总是错误的。我假设优化器将其翻译为:
if (false) {
...
}
有没有办法让分析器以任何方式检测到此代码?即使我们必须创建 FXCop 规则,编译时的错误也可以,但我们不知道如何跟踪这种情况。
DateTime dt = null; // This code raises a compile time error, but the comparison with null is fine?
【问题讨论】:
-
如果您愿意通过不同的 IDE 解决这个问题,IntelliJ 应该有这个检查可用(在许多其他静态检查中)。
-
您没有收到编译器警告吗?
-
不,我确定。试试看。
-
查看 Eric Lipert 对类似问题的回复:stackoverflow.com/a/1972317/871910
-
@juharr 我明白了。将
DateTime与int或任何原语交换都会引发警告。我认为所有结构都可以,但没有。我猜当你重载==时编译器会闭嘴。
标签: c# optimization fxcop