我今天在我的电脑上安装了Reshaper来检查它,每当我在我的代码中有以下声明时,我从Resharper获得一个信息,即没有必要与Null
进行比较。为什么呢?
这是声明:
if (dataGrid.ItemsSource != null && dataGrid.ItemsSource is DataGridCollectionView)
我正在检查类型是否是我想要的类型,以及值是否为Null
。
我要求这样做是有道理的,因为虽然值可能仍然是Null
,但类型可能是真的。我想我必须在文档中遗漏一些事情。
为什么Reshaper说我不需要与null比较?
我错过了什么?
答案 0 :(得分:8)
如果对象为null,is
运算符将始终返回false
,因此在测试类型之前不需要检查null。
如果提供的表达式是非null ,则表达式的计算结果为true,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。
答案 1 :(得分:3)
dataGrid.ItemsSource is DataGridCollectionView
表示“dataGrid.ItemsSource是DataGridCollectionView
的实例”;如果它是一个实例(任何东西),它不能为空,所以空检查是多余的。
答案 2 :(得分:2)
null
将始终从false
测试返回is
,因此null
检查无法实现is
测试尚未完成的任何操作做。唯一疯狂的边缘情况,如果你有一个属性在连续的调用中返回不同的东西,那么这可能是错误的 - 所以如果第一个.ItemsSource
返回的东西与第二个{{1}非常不同}。这将是危险和自我造成的。