c# - 为什么 .NET foreach 循环在集合为空时抛出 NullRefException?

标签 c# .net

所以我经常遇到这种情况...其中 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/

相关文章:

c# - 连接两个集合,从第二个集合中获取值(左外连接)

C# 在浏览器中从选项卡中读取文本或源代码 - 需要一个想法

c# - 带有枚举参数的方法的 Web API 帮助页面

.net - VS 2005 可以为 .NET 4 构建 C# 吗?

c# - 无法确定条件表达式的类型?

.net - mono linux 中的 mscoree.dll 在哪里?

java - 重试模式与休息客户端中的回退模式

java - C# 中相当于 Java 整数文字前缀 0b 的是什么?

c# - 为什么 WebProxy BypassProxyOnLocal 对我不起作用?

返回语句后的 C# 触发事件