📜  C#中的迭代器

📅  最后修改于: 2021-05-29 18:17:17             🧑  作者: Mango

迭代器是C#中的一种方法,可在数组或列表等集合中使用该方法来逐个检索元素。换句话说,我们可以说迭代器用于对集合执行迭代。此功能在C#2.0中引入。它使用yield return语句一次返回集合中的元素,并且始终记住迭代器的当前位置,因此,在进行下一次迭代时,它将返回给定集合的下一个元素。如果要停止迭代,将使用yield break语句。

此方法的返回类型为IEnumerable,IEnumerable ,IEnumerator或IEnumerator 。这意味着通过使用迭代器编译器将自动为您创建IEnumerable或IEnumerator接口,而无需使用foreach循环在您的类中实现IEnumerable或IEnumerator接口。当编译器在您的类中识别出迭代器时,它将自动创建当前的MoveNext并处置IEnumerable或IEnumerator接口的方法。

重要事项:

  • 迭代器可以用作方法或属性。
  • 迭代器方法也称为获取访问器。
  • 您可以将迭代器用作方法或获取访问器。
  • 您不能在事件实例构造函数,静态构造函数或静态终结器中使用迭代器。
  • 迭代器方法不包含ref或out参数。
  • 在这里,yield不是保留字,但是当您将yield与return或break语句一起使用时,yield具有特殊含义。
  • 您可以使用多个yield语句。
  • 它通常与通用或非通用集合一起使用。
  • 使用迭代器时,有必要在程序中添加System.Collections.Generic命名空间。

范例1:

C#
// C# program to illustrate the concept
// of iterator using list collection
using System;
using System.Collections.Generic;
 
 class GFG {
 
    public static IEnumerable GetMyList()
    {
        // Creating and adding elements in list
        List my_list = new List() {
                     "Cat", "Goat", "Dog", "Cow" };
 
        
        // Iterating the elements of my_list
        foreach(var items in my_list)
        {
            // Returning the element after every iteration
            yield return items;
        }
    }
 
    // Main Method
    static public void Main()
    {
 
        // Storing the elements of GetMyList
        IEnumerable my_slist = GetMyList();
 
        // Display the elements return from iteration
        foreach(var i in my_slist)
        {
            Console.WriteLine(i);
        }
    }
}


C#
// C# program to illustrate the concept
// of iterator using array
using System;
using System.Collections.Generic;
 
class GFG {
 
    public static IEnumerable GetMyArray()
    {
        string[] myarray = new string[] {"Geeks",
                        "geeks123", "1234geeks"};
 
        // Iterating the elements of myarray
        foreach(var items in myarray)
        {
 
            // Returning the element after every iteration
            yield return items.ToString();
        }
    }
 
    // Main Method
    static public void Main()
    {
 
        // Storing the elements of GetMyArray
        IEnumerable myitems = GetMyArray();
 
        // Display the elements return from iteration
        foreach(var i in myitems)
        {
            Console.WriteLine(i);
        }
    }
}


输出:
Cat
Goat
Dog
Cow

范例2:

C#

// C# program to illustrate the concept
// of iterator using array
using System;
using System.Collections.Generic;
 
class GFG {
 
    public static IEnumerable GetMyArray()
    {
        string[] myarray = new string[] {"Geeks",
                        "geeks123", "1234geeks"};
 
        // Iterating the elements of myarray
        foreach(var items in myarray)
        {
 
            // Returning the element after every iteration
            yield return items.ToString();
        }
    }
 
    // Main Method
    static public void Main()
    {
 
        // Storing the elements of GetMyArray
        IEnumerable myitems = GetMyArray();
 
        // Display the elements return from iteration
        foreach(var i in myitems)
        {
            Console.WriteLine(i);
        }
    }
}
输出:
Geeks
geeks123
1234geeks