如何在循环中使用linq?

ten*_*our 4 c# linq

让我们从一些源数据开始查询:

int[] someData = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)

在运行以下代码之后,事情按照我的预期运行:a包含2个可归结为12从中拉出的元素someData.

List<IEnumerable<int>> a = new List<IEnumerable<int>>();
a.Add(someData.Where(n => n == 1));
a.Add(someData.Where(n => n == 2));
Run Code Online (Sandbox Code Playgroud)

但是下一个代码只在循环中执行完全相同的操作,并不能按预期工作.当此代码完成时,b包含2个元素,但它们都是相同的 - 指向2.在第二个循环中,它修改了第一个元素b.

List<IEnumerable<int>> b = new List<IEnumerable<int>>();
for (int i = 1; i <= 2; ++i)
{
    b.Add(someData.Where(n => n == i));
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?如何使循环版本像第一个版本一样?

Adu*_*cci 7

Jon Skeet 在这里有一个很好的答案

您需要分配itemp变量并在Linq查询中使用它

List<IEnumerable<int>> b = new List<IEnumerable<int>>();
for (int i = 1; i <= 2; ++i)
{
    int temp = i;
    b.Add(someData.Where(n => n == temp));
}
Run Code Online (Sandbox Code Playgroud)