编译器会为yield return生成一个IEnumerator的实现

解决方案 »

  1.   

    enumerator是接口,你通过接口去调用方法,不一定要实现具体的代码,当然可以调用了,去看看接口的知识吧
      

  2.   

    game.Cross 返回一个 IEnumerator ,这里其实是障眼法,它不可能是 IEnumerator 接口本身,而是已经实现此接口的某个对象实例。
      

  3.   

     yield return circle;请查询这两个关键词组合含义,语法糖语法糖,自然是外面包着糖的
      

  4.   

    你就记住了接口里面没有实现方法
    但是这个接口类型的引用enumerator 肯定指向的是一个对象难道一个对象中还有没有实现的方法吗?你这个对象肯定实现了我这个接口中的方法(因为对象的类继承自这个接口,并且实现了接口其中的方法)所以我可以通过这个指向这个对象的接口类型的引用来使用我这个接口中定义的并且在子类中实现的方法
      

  5.   

    迭代器不需要 IEnumerator 接口。这个已经说过几次了。
    详细看这里我的回答。
    http://bbs.csdn.net/topics/390636800
      

  6.   

    迭代器就是一个有yield语句的方法
      

  7.   

    Caozhy版主你说的至于yield,则是C#编译器自动为你产生两个类,一个包含GetEnumerator,一个包含Current和MoveNext。&这个小弟我不大明白,yield不就是返回一个Ienumerator类型吗这个类型就有Movenext等方法,但你说还会返回一个带有Getenumerator方法的类,一个方法不是只能返回一种类型吗?我有点不解
      

  8.   

    编译器生成类和返回没有关系。void foo()
    {
        var x = new { i = 1 };
    }啥也不返回,编译器还生成了一个匿名类型。
      

  9.   

    迭代器不是yield语句。我的文章你没有看?
      

  10.   

    你的文章我看了,就是那文章说yield返回两个类