【发布时间】:2023-02-09 22:46:30
【问题描述】:
我有以下代码行:
var list = new List<Test>() { new Test("Test1"), new Test("Test2") };
var enumerable = list.Where(t => t.Content == "Test1");
Console.WriteLine($"Enumerable count: {enumerable.Count()}");
Console.WriteLine($"List count: {list.Count}");
list.RemoveAll(t => t.Content == "Test1");
Console.WriteLine($"Enumerable count: {enumerable.Count()}");
Console.WriteLine($"List count: {list.Count}");
我希望输出是
Enumerable count: 1
List count: 2
Enumerable count: 1
List count: 1
但实际上,输出是
Enumerable count: 1
List count: 2
Enumerable count: 0
List count: 1
意味着从列表中删除对象,也将其从 IEnumerable 中删除。我以为我对面向对象编程的掌握相当牢固,但这种行为对我来说似乎非常意外。
谁能解释一下幕后发生了什么?我要补充一点,如果我将 .ToList() 添加到原始的 Where-statement,一切都会如我所料。
【问题讨论】: