最近,我遇到了一个问题,在这个问题中,我可以更改IEnumerable循环迭代的对象foreach。据我了解,在C#中,您不应该能够编辑要遍历的列表,但是经过一番挫折之后,我发现这正是发生的事情。我基本上遍历了LINQ查询,并使用对象ID在数据库中对那些对象进行了更改,这些更改影响了.Where()语句中的值。
有人对此有解释吗?似乎每次迭代LINQ查询都会重新运行
注意:此问题的解决方法是.ToList()在之后添加的.Where(),但我的问题是,为什么此问题完全发生,即是错误还是我不知道的事情
using System;
using System.Linq;
namespace MyTest {
class Program {
static void Main () {
var aArray = new string[] {
"a", "a", "a", "a"
};
var i = 3;
var linqObj = aArray.Where(x => x == "a");
foreach (var item in linqObj ) {
aArray[i] = "b";
i--;
}
foreach (var arrItem in aArray) {
Console.WriteLine(arrItem); //Why does this only print out 2 a's and 2 …Run Code Online (Sandbox Code Playgroud)