一个关于yield返回的问题
有这么一个求质数的程序
类Primes:如下using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Ch11Ex03
{
     public class Primes
     {
         private long min;
         private long max;
         public Primes()
             : this(2, 100)
         {          
         }
         public Primes(long minimum, long maximum)
         {
             if (min < 2)
             {
                 min = 2;
             }
             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;                }
             }
         }
     }
}
programs如下:using System;
using System.Collections.Generic;
using System.Text;
namespace Ch11Ex03
{
     class Program
     {
         static void Main(string[] args)
         {
             Primes primesFrom2To1000 = new Primes(2, 100000);
             foreach (long i in primesFrom2To1000)
                 Console.Write("{0}  ", i);
             Console.ReadKey();
         }
     }
}
我想知道yield返回值是传递给谁,primesFrom2To1000?
如果是,当前循环返回了值以后,循环是怎么继续运行的。
这个地方很含糊,不清楚。
谢谢
------解决方案-------------------- yield return possiblePrime;
并不是类似return的返回命令。
这里的函数真正返回的是一个实现了IEnumerator接口的对象。那么这个对象到底是哪个类型的一个实例呢?这个类型的代码是如何的呢?这些都由C#编译器为你自动生成。你所知道的就是这个对象在作为IEnumerator被使用时会发生什么呢?在MoveNext和Current配合的时候,随着Current返回的值就是possiblePrime这个地方用yield return所返回的值了。
由于C#加入这个关键字引入了太多的误解,建议LZ买本好书仔细研究吧。