有这么一个求质数的程序
类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?
如果是,当前循环返回了值以后,循环是怎么继续运行的。
这个地方很含糊,不清楚。
谢谢

解决方案 »

  1.   

    低价转让:中#美#爱#梯#科技.Net软件工程师培训课程内容(共35G),声音清晰,课程完整!
    需要这个培训视频的朋友请联系 QQ 936652114
      

  2.   

     yield return possiblePrime;
    并不是类似return的返回命令。这里的函数真正返回的是一个实现了IEnumerator接口的对象。那么这个对象到底是哪个类型的一个实例呢?这个类型的代码是如何的呢?这些都由C#编译器为你自动生成。你所知道的就是这个对象在作为IEnumerator被使用时会发生什么呢?在MoveNext和Current配合的时候,随着Current返回的值就是possiblePrime这个地方用yield return所返回的值了。由于C#加入这个关键字引入了太多的误解,建议LZ买本好书仔细研究吧。