为什么我得到“CS0472:表达式的结果总是为真,因为int类型的值永远不等于int类型的null?”

时间:2011-07-20 16:20:06

标签: c# arrays

string[] arrTopics = {"Health", "Science", "Politics"};

我有一个if语句,如:

 if (arrTopics.Count() != null)

当我将鼠标悬停在上述声明上时,它会说:

  

警告CS0472:表达式的结果始终为true,因为int类型的值永远不等于int类型的null?

我无法弄清楚为什么这么说。有人能帮助我吗?

9 个答案:

答案 0 :(得分:21)

int永远不能等于null。 int?是可以为空的版本,可以等于null。

您应该检查if(arrTopics.Count() != 0)

答案 1 :(得分:5)

这意味着它所说的。

“Count”方法返回值类型。这是一个整数。它将始终具有默认值为零的值。

你的检查确实应该是:

if (arrTopics.Count() != 0)

答案 2 :(得分:5)

null表示没有任何值,而不是数字0。并且正如消息所说,int永远不能是null,因为它既不是引用类型也不是可空值类型,因此总是有一些值。

答案 3 :(得分:5)

你想在这里问什么?

   Array.Count() returns an int which will never be null.

如果您想知道阵列是否已经初始化,那么:

   if(arrTopics !=null) ...

如果你想知道它是否已被初始化但是没有成员那么:

  if(arrTopics.Count() > 0) ...

答案 4 :(得分:4)

如错误所述,int永远不会为空。我将代码更改为

if (arrTopics != null && arrTopics.Any())

如果你知道arrTopics是一个数组而且永远不会是

,那就更有效率了
arrTopics.Length != 0

答案 5 :(得分:3)

Null是一个特殊的指针值,而不是整数。有可空类型,它们是null或基类型的可能值之一,但int本身不可为空。

答案 6 :(得分:3)

因为如果数组中的元素没有返回0,则Count方法总是返回整数,否则它将返回元素数。所以你需要做的只是!= null使它成为!= 0> 0

答案 7 :(得分:3)

要弄明白,请查看Count()扩展方法的基础知识。

两件拼图:

  1. 您正在尝试将非可空类型(int类型的值)与null进行比较,因此永远不会引用非可空类型,因为所有非可空类型都是C#中的值类型,但不能被引用。

  2. 通过对象类中的相等oerator定义的不等式,它在base中定义。所以你上面提到的代码完全有效。不幸的是,为了区分在基类中不希望(不被覆盖)的相等运算符出现时的情况,有一些编译器对它进行了警告,因为对于不兼容的类型(或者获得始终为真的条件),你真的会得到一个永远错误的条件在不平等运算符中)

  3. 值类型(不可为空)和可空类型(引用类型)是C#中不兼容的类型。有关更多信息,请查看ECMA论文,了解用于C#语言的类型系统的定义。

答案 8 :(得分:-1)

您的if语句看起来不正确。我假设。你要么打算

if (arrTopics.Any())

OR

if (arrTopics != null)

说明: sequence.Count()希望实例化序列。在Count()序列上使用null方法会导致ArgumentNullException;因此,在使用nullCount()扩展方法之前,您始终需要对照Any()引用。