string[] arrTopics = {"Health", "Science", "Politics"};
我有一个if语句,如:
if (arrTopics.Count() != null)
当我将鼠标悬停在上述声明上时,它会说:
警告CS0472:表达式的结果始终为true,因为int类型的值永远不等于int类型的null?
我无法弄清楚为什么这么说。有人能帮助我吗?
答案 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()扩展方法的基础知识。
两件拼图:
您正在尝试将非可空类型(int类型的值)与null进行比较,因此永远不会引用非可空类型,因为所有非可空类型都是C#中的值类型,但不能被引用。
通过对象类中的相等oerator定义的不等式,它在base中定义。所以你上面提到的代码完全有效。不幸的是,为了区分在基类中不希望(不被覆盖)的相等运算符出现时的情况,有一些编译器对它进行了警告,因为对于不兼容的类型(或者获得始终为真的条件),你真的会得到一个永远错误的条件在不平等运算符中)
值类型(不可为空)和可空类型(引用类型)是C#中不兼容的类型。有关更多信息,请查看ECMA论文,了解用于C#语言的类型系统的定义。
答案 8 :(得分:-1)
您的if
语句看起来不正确。我假设。你要么打算
if (arrTopics.Any())
OR
if (arrTopics != null)
说明:
sequence.Count()
希望实例化序列。在Count()
序列上使用null
方法会导致ArgumentNullException
;因此,在使用null
和Count()
扩展方法之前,您始终需要对照Any()
引用。