3

我今天在我的 PC 上安装了 Reshaper 来检查它,每当我的代码中有以下语句时,我都会从 Resharper 获得一个信息,Null不需要进行比较。为什么?

这是声明:

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

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

我提出这个要求是有道理的,因为类型可能是 true 尽管值可能是 still Null。我想我必须在有关此的文档中遗漏一些东西。

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

我错过了什么?

4

3 回答 3

8

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

文档中:

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

于 2013-11-04T10:44:02.657 回答
3

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

于 2013-11-04T10:43:39.137 回答
2

null将始终falseis测试中返回,因此null检查不会实现is测试尚未完成的任何事情。唯一可能出现异常的极端情况是,如果您有一个属性在连续调用时返回不同的东西 - 所以如果第一个.ItemsSource返回的东西与第二个非常不同.ItemsSource。这将是危险的和自己造成的。

于 2013-11-04T10:43:53.880 回答