关于迭代器.
我实现了如下代码。
class Program
{
class GenEnumerator<T> : IEnumerable
{
public T[] Values { get; set; }
public IEnumerator GetEnumerator()
{
for (int i = 0; i < Values.Length; i++)
yield return Values[i];
}
}
static void Main(string[] args)
{
GenEnumerator<string> g = new GenEnumerator<string>();
g.Values = new string[] { "a", "b", "c", "d", "e" };
g.GetEnumerator().MoveNext();
Console.WriteLine(g.GetEnumerator().Current);
Console.ReadKey();
}
}
为什么current没有值呢?
但如果
var a = g.GetEnumerator();
这样就可以,为什么呢?
如果我继承IEnumerator接口,实现其方法和属性。可以吗?
[解决办法]
IEnumerator ie=list.GetEnumerator();
while (ie.MoveNext())
{
Console.WriteLine(ie.Current);
}
这样才有意义 因为你每次都是
g.GetEnumerator().MoveNext();
Console.WriteLine(g.GetEnumerator().Current);
这样会造成每次重新调g.GetEnumerator()这个方法 造成永远没有MoveNext
你要先定义一个变量
IEnumerator ie=list.GetEnumerator();
然后ie.MoveNext();ie.Current就有值了。