GetEnumerator();yield

GetEnumerator()方法的实质实现:

GetEnumerator();yield

GetEnumerator();yield

说明:只要一个集合点出GetEnumerator方法,就获得了迭代器属性,就可以用MoveNext和Current来实现foreach的效果,如上图。
 
 在.NET中,迭代器模式被IEnumerator和IEnumerable及其对应的泛型接口所封装。如果一个类实现了IEnumerable接口,那么就能够被迭代;调用GetEnumerator方法将返回IEnumerator接口的实现,它就是迭代器本身。
所以一般能用foreach实现的,都可以让集合点出GetEnumerator( ),即得到迭代器,就可以用:
while(ooo.MoveNext())
{
var  = ooo.Current;
}//其实foreach后台实现机制如此!
*****************************************************************************
GetEnumerator();yield
GetEnumerator();yield
两个方法效果一样
 
********************************************************************************
yield关键字用法:
yield一般和迭代器,return或者break关键字结合使用一起使用。
例如:
 publicclass List
{
public static IEnumerable Power(int number(), int exponent())//使用yield return 使得返回值是一个迭代器类型
{
int counter =;
int result =;
while (counter++< exponent)
{
result = result * number;
yield return result;
}
} staticvoid Main()
{
foreach (int i in Power(, ))
{
Console.Write("{0} ", i);
}
}
}
/*
输出:
Output:
2 4 8 16 32 64 128 256 //
*/

了解枚举的机制后,就不得不讲道yield:

  class Program
{
staticvoid Main(string[] args)
{
foreach (var item in Person.Run())
{
Console.WriteLine(item);
}
}
}
class Person
{
public static IEnumerable<int> Run()
{
List<int> list = new List<int>();
foreach (var item in list)
{
yieldreturn item;
}
}
}

//yield会给你生成一个枚举类,而这个枚举类和刚才List中的Enumerator枚举类又无比的一样

 
 
 
 
 
 

GetEnumerator();yield

yield关键字用法:
yield一般和迭代器,return或者break关键字结合使用一起使用。
例如:
publicclass List
{
    public static IEnumerable Power(int number(2), int exponent(8))//使用yield return 使得返回值是一个迭代器类型
    {
        int counter =0;
        int result =1;
        while (counter++< exponent)
        {
            result = result * number;
            yield return result;
        }
    }
staticvoid Main()
    {
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
    }
}
/*
Output:
2 4 8 16 32 64 128 256       //
*/
上一篇:ASP.NET MVC - 探究应用程序文件夹


下一篇:nginx+uwsgi+django+celery+supervisord环境部署