如果一个数组是空的,看起来你不能用“。length”检查它的长度。检查数组是否为空的最佳方法是什么?
答案 0 :(得分:135)
您绝对可以检查空数组的长度。但是,如果您尝试在空引用上执行此操作,您将获得异常。我怀疑那是你遇到的。你可以应付这两个:
if (array == null || array.Length == 0)
如果不是原因,请提供一个简短但完整的程序来说明问题。如果是的原因,那么值得花点时间确保你理解空引用与“空”集合/字符串/等等。
答案 1 :(得分:13)
是的,为了安全起见,我可能会这样做:
if(array == null || array.Length == 0)
答案 2 :(得分:8)
您可以使用
if (array == null || array.Length == 0)
OR
if (!(array != null && array.Length >= 0))
注意!!!!! 确保c#正确实现短路;在进行对象的子比较之前,你必须将对象与NULL进行比较。
C#7.0及以上
if(!array?.Length >= 0)
答案 3 :(得分:4)
如果长度为空并且数组存在,则可以使用.Length
== 0,但是您确定它不为空吗?
答案 4 :(得分:2)
这是最好的方法。请注意,Array是.NET中的一个对象,因此您需要先检查null。
答案 5 :(得分:2)
正如其他人已经建议的那样,通过首先检查引用是否为NullReferenceException
,您可能会得到null
。但是,您需要问问自己该检查是否真的有必要。您是否会这样做,因为引用可能是null
而null
在您的代码中具有特殊含义?或者你会这样做来掩盖一个错误?这个问题的性质让我相信它会是后者。在这种情况下,您确实需要深入检查代码并找出为什么该引用首先没有正确初始化。
答案 6 :(得分:2)
Jon Skeet回答正确。请记住,“IF”中的测试顺序很重要。 在长度之前检查空值。我也更喜欢把null放在相等的左侧......只是我从Java那里得到的习惯使得代码更高效,更快......我认为它在今天的很多应用程序中并不重要,但是这是一种很好的做法。
if(null == array || array.Length == 0)
答案 7 :(得分:1)
建议的测试没问题,只要数组初始化......
马丁。
答案 8 :(得分:1)
检查数组是否先为空,这样就可以避免空指针异常
任何语言的逻辑:如果array为null或为空:do ....
答案 9 :(得分:1)
如果array
为null
,则尝试拒绝array.Length
会抛出NullReferenceException
。如果您的代码认为null
是array
的无效值,您应该拒绝并责怪调用者。其中一种模式就是抛出ArgumentNullException
:
void MyMethod(string[] array)
{
if (array == null) throw new ArgumentNullException(nameof(array));
if (array.Length > 0)
{
// Do something with array…
}
}
如果你想接受一个null
数组作为不做某事或作为可选参数的指示,如果它是null,你可能根本不能访问它:
void MyMethod(string[] array)
{
if (array != null)
{
// Do something with array here…
}
}
如果您想array
null
或长度为零,则不要触摸void MyMethod(string[] array)
{
if (array?.Length > 0)
{
// Do something with array…
}
}
,那么您可以C#-6’s null coalescing operator同时检查两者。
foreach (var elem in array) {«body»}
将空数组视为一种特殊情况似乎很奇怪。在许多情况下,如果您(例如,无论如何只是遍历数组),则不需要将空数组视为特殊情况。当«body»
为array.Length
时,0
将永远不会执行array == null || array.Length == 0
。如果您正在专门处理Length == 0
,例如提高效果,您可以考虑为后代发表评论。否则,检查{{1}}似乎是多余的。
多余的代码使得理解程序更加困难,因为阅读代码的人可能会认为每行都是解决某些问题或实现正确性所必需的。如果你包含不必要的代码,那么读者将会在删除之前花费很长时间来试图弄清楚为什么该行是必要的; - )。
答案 10 :(得分:0)
你的意思是空或空,两个不同的东西,
如果数组被实例化但是为空,那么长度是正确的,如果它尚未实例化,那么test vs null
答案 11 :(得分:0)
由于.Net> = 5.0,所以最好的方法是使用Any:
if(!array.Any()) {
//now you sure it's empty
}
对于可为空的数组:
if(!(array?.Any() == true)) {
//now you sure it's null or empty
}
答案 12 :(得分:0)
// 还有另一种方法来检查数组是否包含项
if ( array.Count == 0) return;