关于C#:ForEach设计理念

foreach design idea

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why does .NET foreach loop throw NullRefException when collection is null?

如果目标集合为空,则foreach迭代器将引发异常。

例子:

1
2
List<string> names = null;
foreach(var name in names) { /* throws exception */ }

它背后的设计理念是什么?不通过循环迭代来代替.NET框架引发异常是否很方便?


通常,空集合表示集合无效。我希望一个空集合不会迭代,而是一个空集合异常,因为我期望一个有效的集合。

为什么.NET foreach循环在集合为空时引发NullRefException?


我认为背后没有任何想法。正如您所知,foreach是在很晚的时候添加的,然后是枚举器,foreach是建立在它之上的(*)。

(*)foreach在某种程度上等同于:

1
2
3
4
5
var enumerator = someList.GetEnumerator();
while (enumerator.MoveNext())
{
    //do something with enumerator.Current
}

不能在空的东西上运行GetEnumerator