为什么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,之后看起来像是随机数。为什么它不遍历质数列表呢?

为什么LINQ不能像预期的那样工作?

1不是素数,所以将它添加到primes可能是一个不好的开始。看起来在每次循环迭代中,你都在寻找primes中的第一个元素,使得x/1的余数为0,这将始终为真。

我没有亲自试过这个程序,所以我可能是错的,但这应该是一个很好的开始。

我想你想要的是。any运算符

if (!primes.Any(y=> x%y == 0) )

还有很多使用LINQ和PLINQ计算质数的例子。

我在这段代码中看到的第一个问题是primes列表初始化为1。这个数字有两个问题- 1不是素数,1总是满足FirstOrDefault lambda中提出的要求,因为任何数模1都会得到0的结果。

除此之外,一切似乎都还不错。