List.AddRange与IEnumerable <T>参数不起作用?

Joh*_*ohn 8 c# ienumerable list addrange deferred

我有以下场景,我想在列表中添加一些项目...

List<T> items = new List<T>();
IEnumerable<T> addItems = someCollection.Where(...);
items.AddRange(addItems);
Run Code Online (Sandbox Code Playgroud)

使用此代码,列表中不会添加任何项目,但如果我在Linq语句之后添加.ToList(),则会正确添加项目.我想这是由于延迟执行,但我想如果List.AddRange函数接受一个I​​Enumerable,它将枚举要添加的项目.

有人可以清楚为什么会这样吗?

Joh*_*ohn 2

感谢您的回复。我尝试简化此示例的代码,但像往常一样,问题在于细节!

在 .Where() 语句和 AddRange() 调用之间,代码(深层)清除了源(本例中为“items”)列表。开发人员没有意识到过滤器被推迟到 AddRange() 调用,此时他们已经清除了源列表。

很高兴知道我没有失去情节:)