Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我会得到;CS0472:表达式的结果始终为true,因为int类型的值永远不等于int类型的null;_C#_Arrays - Fatal编程技术网

C# 为什么我会得到;CS0472:表达式的结果始终为true,因为int类型的值永远不等于int类型的null;

C# 为什么我会得到;CS0472:表达式的结果始终为true,因为int类型的值永远不等于int类型的null;,c#,arrays,C#,Arrays,我有一个if语句,如: string[] arrTopics = {"Health", "Science", "Politics"}; 当我将鼠标悬停在上述语句上时,它会显示: 警告CS0472:表达式的结果始终为真,因为int类型的值永远不等于int类型的null 我不明白它为什么这么说。有人能帮我吗?int不能等于nullint?是可为null的版本,可以等于null 您应该检查是否(arrTopics.Count()!=0)。它的意思是它所说的 “Count”方法返回一个值类型。这是一个

我有一个if语句,如:

string[] arrTopics = {"Health", "Science", "Politics"};
当我将鼠标悬停在上述语句上时,它会显示:

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


我不明白它为什么这么说。有人能帮我吗?

int
不能等于null
int?
是可为null的版本,可以等于null

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

它的意思是它所说的

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

你的支票应该是:

 if (arrTopics.Count() != null)

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

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

因为Count方法总是返回整数,如果数组中没有元素,它将返回0,否则它将返回元素数。因此,您需要做的只是
!=空值
设为
!=0
>0

正如错误所说,
int
永远不能为空。我会把密码改成

if (arrTopics.Count() != 0)
或者,如果您知道arrTopics是一个数组,而never null是,则效率更高

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

你想问什么

arrTopics.Length != 0
如果您想知道阵列是否已初始化,请执行以下操作:

   Array.Count() returns an int which will never be null.
如果您想知道它是否已初始化但没有成员,那么:

   if(arrTopics !=null) ...

要解决这个问题,请查看Count()扩展方法的geclaration

两块拼图:

  • 您试图将不可为null的类型(int类型的值)与null进行比较,因此永远不会引用不可为null的类型,因为所有不可为null的类型都是C#中的值类型,不能被引用

  • 通过对象类中的相等运算符定义的不等式,该对象类在基中定义。因此,上面提到的代码可能是完全有效的。不幸的是,为了区分在基类中不希望(未重写)出现相等运算符时的情况,有一些编译器警告,因为对于不兼容的类型,确实会得到一个always false条件(或者在不等式运算符中得到一个always true条件)


  • 和值类型(不可空)和可空类型(引用类型)在C#中是不兼容的类型。有关更多信息,请查阅ECMA文件,了解C语言中使用的类型系统的定义标准。

    如果您的
    语句看起来不正确,请查看
    。我想是吧。你不是故意的吗

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

    说明:
    sequence.Count()。添加问号
    将返回
    null
    ,而不是
    int
    。另外,
    Count()
    希望序列被实例化。对
    null
    序列使用
    Count()
    方法会导致
    ArgumentNullException
    ;因此,在选择
    Count()
    Any()
    扩展方法或使用问号之前,您始终需要检查
    null
    引用。

    我自己回答得再好不过了。再加上,int不可能为null,因为它是值类型而不是引用type@m.edmondson:但是
    Nullable
    是一种值类型,它可以有一个空值,所以你的推理不起作用。@Jon Skeet-如果这是错误的,我道歉,我在那篇文章中读到的是错误的“可空类型是系统的实例。可空结构。”@m.edmondson:是的,可空结构。因此是引用类型。更准确的是:int不能为null,因为它是不可空值类型,而不是引用类型或可空值类型。@Jon:我想你想写“是的,可空结构”。因此,数组的值类型“Count()不是属性-它是methodWoops,是的,错误类型…我的错误。代码表示方法,注释表示属性。我已经纠正了错误对齐。可能重复
    if(arrTopics?.Count() != null)
    
    if (arrTopics.Any())
    
    if (arrTopics != null)