Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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#迭代器和生成器,如何利用它们_C#_.net_Iterator_Generator_Enumerators - Fatal编程技术网

什么是C#迭代器和生成器,如何利用它们

什么是C#迭代器和生成器,如何利用它们,c#,.net,iterator,generator,enumerators,C#,.net,Iterator,Generator,Enumerators,我是一名VB.Net开发人员,是C#的新手, 在查看C#文档时,我通过迭代器和生成器了解到了迭代器和生成器的用法,但我无法完全理解其用法,我认为任何人都可以解释(用vb perceptive;如果可能)迭代器是生成项目序列的一种简单方法,而无需自己实现IEnumerable/IEnumerator。迭代器是一种返回可在foreach循环中枚举的IEnumerable的方法 下面是一个简单的例子: public IEnumerable<string> GetNames() {

我是一名VB.Net开发人员,是C#的新手,
在查看C#文档时,我通过迭代器和生成器了解到了迭代器和生成器的用法,但我无法完全理解其用法,我认为任何人都可以解释(用vb perceptive;如果可能)

迭代器是生成项目序列的一种简单方法,而无需自己实现
IEnumerable
/
IEnumerator
。迭代器是一种返回可在foreach循环中枚举的
IEnumerable
的方法

下面是一个简单的例子:

public IEnumerable<string> GetNames()
{
    yield return "Joe";
    yield return "Jack";
    yield return "Jane";
}

foreach(string name in GetNames())
{
    Console.WriteLine(name);
}
public IEnumerable GetNames()
{
收益回报“乔”;
屈服返回“杰克”;
收益回报率“简”;
}
foreach(GetNames()中的字符串名称)
{
Console.WriteLine(名称);
}
请注意
yield return
语句:这些语句实际上不是从方法返回的,它们只是将下一个元素“推送”给正在读取实现的人

当编译器遇到迭代器块时,它实际上会将其重写到实现
IEnumerable
IEnumerator
的类中的状态机。迭代器中的每个
yield return
语句都对应于该状态机中的一个状态


有关迭代器的更多详细信息,请参见Jon Skeet。迭代器最常用于遍历不同类型的列表。迭代器在.net中称为枚举器。关于迭代器的另一个问题是:术语“生成器”在其他语言中也有使用——请看一个您可能需要执行此操作的示例。如果目标只是允许枚举“Joe”、“Jack”和“Jane”?是的,这个示例不是很有用,您可以很容易地使用数组来代替。有关更多有用的示例,请参见;)为了保持这个答案的相对性,Jon Skeet的系列不再存在于上述url中。可以在这里找到: