日期:2014-05-17  浏览次数:20760 次

关于迭代器.
我实现了如下代码。

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()这个方法 造成永远没