本帖最后由 yi_piao 于 2014-02-14 20:00:40 编辑

解决方案 »

  1.   

    yield return 在遍历的时候才会返回值。
      

  2.   

    看不懂这是什么乱七八糟的东西。如果人家用 foreach 之类的语句取得 Enumerator,人家第一次就取得了,以后就一直用这个返回。你难道以为人家要一遍遍地取得“新的” Enumerator?你的程序根本不符合迭代的概念。
      

  3.   

    对于一个简单二叉树
        public class BTree
        {
            public BTree Left;
            public BTree Right;
            public int Value;
        }
    左递归优先的枚举基本上就是    static IEnumerable<object> 枚举(BTree tree)
        {
            yield return tree.Value;
            if (tree.Left != null)
            {
                foreach (var v in 枚举(tree.Left))
                    yield return v;
            }
            if (tree.Right != null)
            {
                foreach (var v in 枚举(tree.Right))
                    yield return v;
            }
        }然后访问时可以写    foreach (var v in 枚举(tree))
        {
                 ..........
        }你那种混乱的代码,死抠底层而不会使用高效率的高层编程,实在不是c#风格。估计是学c语言把脑筋学得“死掉”了。
      

  4.   

    应该改为强类型的:static IEnumerable<object> 枚举(BTree tree)  -->  static IEnumerable<int> 枚举(BTree tree)不可死抠什么 GetEnumerator 这个名词儿。看你的整个混乱描述,把什么时候调用 GetEnumerator 的基本流程都搞错了,自然把原本简单的东西给搞成了一团酱紫。