c#foreach、IEnumrator、yield的懂得
c#:foreach、IEnumrator、yield的理解using Systemusing System.Collections.Genericusing System.Textus
c#:foreach、IEnumrator、yield的理解
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace yield_learn
{
public class person : System.Collections.IEnumerable
{
#region IEnumerable
public string x = "cc";
public System.Collections.IEnumerator GetEnumerator()
{
yield return "1";
Thread.Sleep(3000);
yield return "2";
Thread.Sleep(3000);
yield return "3";
Thread.Sleep(3000);
yield return "4";
Thread.Sleep(3000);
yield return "5";
Thread.Sleep(3000);
yield return "6";
}//是如何选择遍历哪个的??
public System.Collections.IEnumerator getnum()
{
yield return "dshdjs";//为什么没有输出这个??
}
#endregion
}
class Program
{
static void Main(string[] args)
{
person arrperson = new person();
foreach (string s in arrperson)//遍历一个类中的string吗,必须带有System.Collections.IEnumerator的才遍历,但是为什么第二个不遍历呢?
{
System.Console.WriteLine(s);
}
System.Console.ReadLine();
}
}
}
[解决办法]IEnumerable 用于foreach
IEnumerator 用于while(xxx.MoveNext())
明白了没。两个不一样。
[解决办法]你去看下IEnumerable接口的定义,你再试试把GetEnumerator()函数删除是否会报错。GetEnumerator()是必须有的,而getnum()是可有可无的,foreach遍历只会使用必须存在的而不是可有可恶的方法,不是看返回值类型符合就会去用,而是看是否满足接口的规范。