枚举迭代

/*
枚举迭代
如果需要foreach迭代的支持那就要实现接口IEnumerable的GetEnumerator方法
返回一个IEnumerable接口的枚举
该方法通过MoveNext方法和Current属性来迭代。

用yield语句轻松创建枚举器
*/
using System;
using System.Collections.Generic;

namespace Frank
{
	public class Test
    {
        public static void Main(string[] args)
        {
			/*
			IL不会把foreach解析为IL语言
			C#中定义的foreach
			foreach(Person p in persons)
			{
				System.Console.WriteLine(p)
			}
			IL解析后的代码段
			IEnumerator<Person> enumerator = persons.GetEnumerator();
			while(enumerator.MoverNext())
			{
				Person p = enumerator.Current;
				System.Console.WriteLine(p);
			}
			*/

			Test2 t = new Test2();
			foreach(string item in t)
			{
				System.Console.WriteLine(item);
			}
        }
	}
	//自定义类实现foreach的支持
	//其实要想自己的类支持迭代,只要有方法GetEnumerator返回IEnumerator即可
	public class Test2
	{
		public IEnumerator<string> GetEnumerator()//迭代块
		{
			yield return "Hello";//返回一个字符串
			yield return "World";//返回第二个字符串
			// yield break;//停止迭代
		}
	}
}

  

posted on 2013-11-27 14:25  wp456  阅读(308)  评论(0)    收藏  举报

导航