有这么一个求质数的程序
类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?
如果是,当前循环返回了值以后,循环是怎么继续运行的。
这个地方很含糊,不清楚。
谢谢
类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?
如果是,当前循环返回了值以后,循环是怎么继续运行的。
这个地方很含糊,不清楚。
谢谢
解决方案 »
- 64位电脑中的32位winfrom程序怎么弄通过一个窗口句柄访问一个64位窗口的文件路径
- 求大型商場的信息化应用系统的需求说明书
- 如何让datagridview的某一列高亮超过某一个设定范围的值
- C#问题
- 请教大家一个基础问题:在属性定义的前面加上[DataMember]是什么意思呢?
- 哈!做了一个简单有用的WAP网站,欢迎各位看看哈
- 兄弟最近要写一个仪器设备管理软件,如果管理电脑、机器设备等。谁有这方面软件,参考一下!C#,vbnet均可!谢谢
- Devexpress GridView 显示问题
- 求助vs2005安装问题
- 如何知道一个类文件中引用了哪些命名空间和相关的DLL?
- 我想学习C#游戏开发 能给我介绍点资料吗??
- 送分题目。求一个在c#中的函数或是方法。和api函数RectInRegion一样功能的
需要这个培训视频的朋友请联系 QQ 936652114
并不是类似return的返回命令。这里的函数真正返回的是一个实现了IEnumerator接口的对象。那么这个对象到底是哪个类型的一个实例呢?这个类型的代码是如何的呢?这些都由C#编译器为你自动生成。你所知道的就是这个对象在作为IEnumerator被使用时会发生什么呢?在MoveNext和Current配合的时候,随着Current返回的值就是possiblePrime这个地方用yield return所返回的值了。由于C#加入这个关键字引入了太多的误解,建议LZ买本好书仔细研究吧。