如果声明与关键字和比较为空

时间:2013-11-04 10:42:35

标签: c# .net null typechecking

我今天在我的电脑上安装了Reshaper来检查它,每当我在我的代码中有以下声明时,我从Resharper获得一个信息,即没有必要与Null进行比较。为什么呢?

这是声明:

if (dataGrid.ItemsSource != null && dataGrid.ItemsSource is DataGridCollectionView)

我正在检查类型是否是我想要的类型,以及值是否为Null

我要求这样做是有道理的,因为虽然值可能仍然是Null,但类型可能是真的。我想我必须在文档中遗漏一些事情。

为什么Reshaper说我不需要与null比较?

我错过了什么?

3 个答案:

答案 0 :(得分:8)

如果对象为null,is运算符将始终返回false,因此在测试类型之前不需要检查null。

来自documentation

  

如果提供的表达式是非null ,则表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。

答案 1 :(得分:3)

dataGrid.ItemsSource is DataGridCollectionView表示“dataGrid.ItemsSource是DataGridCollectionView的实例”;如果它是一个实例(任何东西),它不能为空,所以空检查是多余的。

答案 2 :(得分:2)

null将始终从false测试返回is,因此null检查无法实现is测试尚未完成的任何操作做。唯一疯狂的边缘情况,如果你有一个属性在连续的调用中返回不同的东西,那么这可能是错误的 - 所以如果第一个.ItemsSource返回的东西与第二个{{1}非常不同}。这将是危险和自我造成的。