所以我经常遇到这种情况...其中 Do.Something(...)
返回一个空集合,如下所示:
int[] returnArray = Do.Something(...);
然后,我尝试像这样使用这个集合:
foreach (int i in returnArray)
{
// do some more stuff
}
我很好奇,为什么 foreach 循环不能对空集合进行操作?在我看来,使用空集合执行 0 次迭代似乎合乎逻辑……相反,它会抛出 NullReferenceException
。有人知道为什么会这样吗?
这很烦人,因为我使用的 API 并不清楚它们究竟返回什么,所以我最终到处都是 if (someCollection != null)
。
最佳答案
好吧,简短的回答是“因为编译器设计者就是这样设计的。”但实际上,您的集合对象为 null,因此编译器无法让枚举器循环遍历集合。
如果你真的需要做这样的事情,试试空合并运算符:
int[] array = null;
foreach (int i in array ?? Enumerable.Empty<int>())
{
System.Console.WriteLine(string.Format("{0}", i));
}
关于c# - 为什么 .NET foreach 循环在集合为空时抛出 NullRefException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088147/