所以我经常遇到这种情况...其中Do.Something(...)
返回空集合,如下所示:
int[] returnArray = Do.Something(...);
然后,我try 这样使用这个集合:
foreach (int i in returnArray)
{
// do some more stuff
}
我只是好奇,为什么foreach循环不能对空集合进行操作?在我看来,用空集合执行0次迭代似乎是合乎逻辑的...相反,它抛出了一个NullReferenceException
.有人知道为什么会这样吗?
这很烦人,因为我使用的API并不清楚它们到底返回了什么,所以我最终到处都是if (someCollection != null)
个……
Edit:感谢大家解释说,foreach
使用GetEnumerator
,如果没有枚举器可以获取,则foreach将失败.我猜我是在问,为什么语言/运行时不能或不会在获取枚举器之前执行NULL判断.在我看来,这种行为仍然会被很好地定义.