让我们从一些源数据开始查询:
int[] someData = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)
在运行以下代码之后,事情按照我的预期运行:a包含2个可归结为1和2从中拉出的元素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)
为什么会发生这种情况?如何使循环版本像第一个版本一样?
Jon Skeet 在这里有一个很好的答案
您需要分配i给temp变量并在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)
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |