Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# foreach设计理念_C#_.net - Fatal编程技术网

C# foreach设计理念

C# foreach设计理念,c#,.net,C#,.net,可能重复: 如果目标集合为null,foreach迭代器将引发异常 例如: List<string> names = null; foreach(var name in names) { /* throws exception */ } 列表名称=null; foreach(名称中的变量名){/*引发异常*/} 它背后的设计理念是什么。不迭代循环而不是.NET Framework引发异常不是很方便吗?通常,空集合表示集合无效。我希望空集合不会迭代,但空集合会异常,因为我希望的是

可能重复:

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

例如:

List<string> names = null;
foreach(var name in names) { /* throws exception */ }
列表名称=null;
foreach(名称中的变量名){/*引发异常*/}

它背后的设计理念是什么。不迭代循环而不是.NET Framework引发异常不是很方便吗?

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


我认为这背后没有任何想法。正如您所知,foreach是在枚举器之后添加的,foreach是在它的基础上构建的(*)

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

var enumerator = someList.GetEnumerator();
while (enumerator.MoveNext())
{
    //do something with enumerator.Current
}

你不能在空的东西上运行
GetEnumerator

你认为在哪个版本的C中引入了
foreach
?在2.0版中,你可以为自己的集合编写foreach。我刚刚发现这一点:请看:迭代器。不,在1.0版中,您可以编写可与foreach一起使用的集合。foreach语句是“duck-typed”;集合类型必须有一个
GetEnumerator()
方法,GetEnumerator方法返回的类型必须有一个
bool MoveNext()
方法和一个
Current
属性。哇!我不知道这件事。非常感谢。