Primes类中中包含返回IEnumerator接口的GetEnumerator()的方法,但是Primes类并没有派生IEnumerator的接口,返回的IEnumerator接口是在那里实现的,返回的是什么类的实例?
代码如下:
    
public class Primes
    {
        private long min;
        private long max;        public Primes()
            : this(2, 100)
        { }        public Primes(long minimum, long maximum)
        {
            if (minimum < 2) min = 2;
            else min = minimum;            max = maximum;
        }        public IEnumerator GetEnumerator()
        {
            for (long possiblePrime = min; possiblePrime <= max; possiblePrime++)
            {
                bool isPrime = true;
                for (long possibleFactor = 2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++)
                {
                    long remainderAfterDivision = possiblePrime % possibleFactor;
                    if (remainderAfterDivision == 0)
                    {
                        isPrime = false;
                        break;
                    }
                }
                if (isPrime)
                {
                    yield return possiblePrime;
                }            }
        }
    }    class Program
    {
        static void Main(string[] args)
        {
            Primes primesFrom2To1000 = new Primes(1000000000000, 1000000010000);
            IEnumerator myEnumerator = primesFrom2To1000.GetEnumerator();
            myEnumerator.MoveNext();
            myEnumerator.MoveNext();
            //foreach (long i in primesFrom2To1000)
            //    Console.Write("{0} ", i);
            Console.ReadKey();
        }
    }

解决方案 »

  1.   

    你的理解错误
    primes 并没有实现ienum...
    只是返回一个
      

  2.   

    yield return 是在 .Net 2.0 才有的产物。
    使用 yield return 语句,编译器就会在编译的时候,生成一个实现Ienumator接口的类.并且自动维护该类的状态.比如movenext 
      

  3.   

    编译器生成的IEnumator接口是在哪个类中实现的,接口不是抽象的么,必须在继承它的类中实现。
    返回接口是否是返回实现接口类的实例?
      

  4.   

    关于 yield return ,给个小例子:
    namespace yieldReturnPractice
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> docs1 = new List<string>();
                docs1.Add("1");
                docs1.Add("2");
                docs1.Add("3");
                docs1.Add("4");
                docs1.Add("5");            foreach (var item in Documents1(docs1))
                {
                    Console.Write(" {0} ", item);
                }            Console.Write("\n***********************************\n");            foreach (var item in Documents2(docs1))
                {
                    Console.Write(" {0} ", item);
                }            Console.ReadKey();
            }        static IEnumerable Documents1(List<string> docs)
            {
                foreach (var item in docs)
                {
                    if (item != "4")
                        yield return item;
                }            Console.Write(" {0} ", "Holle Danny");
            }        static IEnumerable Documents2(List<string> docs)
            {
                foreach (var item in docs)
                {
                    if (item != "4")
                        yield return item;
                    else
                        yield break;
                }            Console.Write(" {0} ", "Holle Danny");
            }
        }
    }
      

  5.   

    是不是函数返回值类型是 IEnumertor接口类型,并且在函数中返回为yield return就可以用foreach循环迭代。
    系统会创建类,自动实现相关的IEnumertor接口,并且实现的类在IDE环境中不显示。
      

  6.   

    编译器会创建一个实现了IEnumertor接口的类,并将其返回