小编Joo*_*337的帖子

为什么在迭代LINQ列表时可以编辑它?

最近,我遇到了一个问题,在这个问题中,我可以更改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)

c# linq

13
推荐指数
2
解决办法
724
查看次数

标签 统计

c# ×1

linq ×1