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

May*_*aya 13 c# arrays

string[] arrTopics = {"Health", "Science", "Politics"};
Run Code Online (Sandbox Code Playgroud)

我有一个if语句,如:

 if (arrTopics.Count() != null)
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在上述语句上时,它说:

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

我无法弄清楚为什么这么说.有谁能够帮我?

mdm*_*mdm 22

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

你应该检查一下if(arrTopics.Count() != 0).

  • 自己无法更好地回答.只是添加到这个,并且int不可能为null,因为它是**值类型**而不是**引用类型** (5认同)
  • @ m.edmondson:但是`Nullable <int>`是一个值类型,而**可以有一个空值,所以你的推理不起作用. (4认同)

Khe*_*pri 5

它意味着它所说的.

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

你的检查应该是:

if (arrTopics.Count() != 0)
Run Code Online (Sandbox Code Playgroud)


Cod*_*aos 5

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


Bon*_*nyT 5

您想在这里问什么?

   Array.Count() returns an int which will never be null.
Run Code Online (Sandbox Code Playgroud)

如果您想知道数组是否已初始化,请执行以下操作:

   if(arrTopics !=null) ...
Run Code Online (Sandbox Code Playgroud)

如果您想知道它是否已初始化但没有成员,则:

  if(arrTopics.Count() > 0) ...
Run Code Online (Sandbox Code Playgroud)