2016-04-13 3 views
4

Есть ли способ обнаружить этот фрагмент кода?Как определить нулевые сравнения с типами, не допускающими nullable

DateTime dt = DateTime.Now; 
if (dt == null) { 
    MessageBox.Show("Imposible with datetime!!!"); 
} 

В нашем проекте мы обнаружили, что в компиляции Release, все, если получает удалены, так как сравнение между DateTime и нуль всегда будет ложным. Я полагаю, оптимизатор переводит его как:

if (false) { 
    ... 
} 

Есть ли способ заставить анализатор обнаружить этот код каким-либо образом? Ошибка во время компиляции тоже будет прекрасна, даже если нам нужно создать правило FXCop, но мы не знаем, как отслеживать этот случай.

DateTime dt = null; // This code raises a compile time error, but the comparison with null is fine? 
+0

Если вы открыты для решения этого через другой IDE, IntelliJ должны иметь такую ​​проверку в наличии (среди многих других статических проверок). – dasblinkenlight

+1

Вы не получаете предупреждение компилятора? –

+0

Нет, я уверен. Попробуй. –

ответ

0

Как и в случае с IDE, ReSharper поддерживает эту проблему. Это плагин для Visual Studio, и мы сочли его очень полезным с годами. Он по-прежнему опережает Microsoft с точки зрения возможностей рефакторинга.

https://www.jetbrains.com/resharper/