如果(Array.Length == 0)

soo*_*ise 54 c# arrays

如果数组为空,看起来你无法使用".length"检查它的长度.检查数组是否为空的最佳方法是什么?

Jon*_*eet 138

你绝对可以检查一个数组的长度.但是,如果您尝试在空引用上执行此操作,您将获得异常.我怀疑那是你遇到的.你可以应对这两个:

if (array == null || array.Length == 0)
Run Code Online (Sandbox Code Playgroud)

如果这不是原因,请提供一个简短但完整的程序来证明问题.如果这原因,那么值得花一点时间来确保你理解空引用与"空"集合/字符串/等等.

  • 关于上面代码的重要注意事项是在csharp中,或运算符(`||`)是短路的.它看到数组为null(语句为true)并且不会尝试计算第二个语句.如果是这样,你仍然会得到一个NullReferenceException并且必须嵌套你的if语句.并非所有语言都是这样的,VB.Net就是一个例子.默认的"Or"运算符不是短路的; 他们有'OrElse`.http://support.microsoft.com/kb/817250 (44认同)
  • ......一个空数组. (9认同)
  • Jon Skeet已经发言了! (3认同)
  • @amitjha:好吧,我不知道您的单元测试是什么样子,但是它们*是*不相同的。(实际上,由于优先级,您需要在“ array?.Length ?? 0`”周围加上括号,但是...)请参阅https://dotnetfiddle.net/uRM74Y (2认同)

kem*_*002 13

是的,为了安全起见,我可能会这样做:

if(array == null || array.Length == 0)
Run Code Online (Sandbox Code Playgroud)


Wal*_*.K. 8

您可以使用

if (array == null || array.Length == 0)
Run Code Online (Sandbox Code Playgroud)

要么

if (!(array != null && array.Length >= 0))
Run Code Online (Sandbox Code Playgroud)

注意!!!!!确保c#正确实现短路; 在转到对象的子比较之前,必须将对象与NULL进行比较.

C#7.0及以上

if(!array?.Length >= 0)
Run Code Online (Sandbox Code Playgroud)


小智 5

由于 .Net >= 5.0 ,最好的方法是使用Any

if(!array.Any()) {
   //now you sure it's empty
}
Run Code Online (Sandbox Code Playgroud)

对于可为空的数组:

if(!(array?.Any() == true)) {
   //now you sure it's null or empty
}
Run Code Online (Sandbox Code Playgroud)