我经常遇到这种情况……Do.Something(...)
返回一个空集合,就像这样:
int[] returnArray = Do.Something(...);
然后,我尝试这样使用这个集合:
foreach (int i in returnArray)
{
// do some more stuff
}
我只是好奇,为什么foreach循环不能在一个空集合上运行?对我来说,0次迭代会在空集合上执行...相反它抛出了NullReferenceException
。有人知道这可能是为什么吗?
这很烦人,因为我正在使用不清楚返回值的API,所以到处都是if (someCollection != null)
。
null
集合上使用foreach
的人,我只想说你可以在null
的IDisposable
上使用using
。这样做没有真正的技术原因;这是编译器中的一个疏忽,如果有足够的需求改变它,那么每个人都应该在https://github.com/dotnet/csharplang上表达自己的意见。我已经厌倦了因为忘记检查集合是否为空而得到空引用异常。当没有理性的人不愿意将其视为空时,这是完全不必要的。 - Emperor Eto