为什么LINQ没有按预期工作?

时间:2011-12-20 20:43:59

标签: c#

我创建了一个简单的程序来计算素数,如下所示:

        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,之后看似随机数字。为什么不在“素数”列表中迭代?我也尝试使用具有相同结果的Exists函数。

3 个答案:

答案 0 :(得分:5)

1不是素数,因此将其添加到primes可能是一个糟糕的开始。看起来在每个循环迭代中,您在primes中找到第一个元素,使得x / 1的余数为0,这将始终为真。

我没有亲自尝试这个程序,所以我错了,但这应该是一个好的起点。

答案 1 :(得分:3)

我想你想要.Any运算符

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

还有许多使用LINQ和PLINQ计算素数的例子。 Here's just one.

答案 2 :(得分:2)

我在这段代码中看到的第一个问题是primes列表初始化为1.该号码存在两个问题 - 1不是素数,1总是符合FirstOrDefault中提出的要求lambda,因为任何一个模数都会在结果中给出0。

除此之外,一切似乎都很好。