为什么LINQ不能像预期的那样工作?
本文关键字:工作 LINQ 不能 为什么 | 更新日期: 2023-09-27 18:18:31
我创建了一个简单的素数计算程序,如下所示:
var db = new HighScoreEntities();
List<Int64> primes = new List<Int64>(){1};
for (Int64 x = 2; x < Int64.MaxValue; x++)
{
if (primes.FirstOrDefault(y=> x%y == 0) == 0){
primes.Add(x);
db.Primes.AddObject(Prime.CreatePrime(x));
db.SaveChanges();
}
}
我的问题是y
在第一次通过时得到225,之后看起来像是随机数。为什么它不遍历质数列表呢?
1不是素数,所以将它添加到primes
可能是一个不好的开始。看起来在每次循环迭代中,你都在寻找primes
中的第一个元素,使得x/1的余数为0,这将始终为真。
我没有亲自试过这个程序,所以我可能是错的,但这应该是一个很好的开始。
我想你想要的是。any运算符
if (!primes.Any(y=> x%y == 0) )
还有很多使用LINQ和PLINQ计算质数的例子。
我在这段代码中看到的第一个问题是primes
列表初始化为1。这个数字有两个问题- 1不是素数,1总是满足FirstOrDefault
lambda中提出的要求,因为任何数模1都会得到0的结果。
除此之外,一切似乎都还不错。