编辑
作为参考,这里是 eric 在评论中提到的博客文章
https://ericlippert.com/2009/05/18/foreach-vs-foreach/
原创
我想更多的是一种好奇心,但对于 C# Specification Savants 来说……
为什么 ForEach() 子句不能(或不可用)用于 IQueryable/IEnumerable 结果集...
您必须首先将结果转换为 ToList() 或 ToArray() 大概 C# 迭代 IEnumerables Vs 的方式存在技术限制。列表...是否与 IEnumerables/IQerable 集合的延迟执行有关。例如
var userAgentStrings = uasdc.UserAgentStrings
.Where<UserAgentString>(p => p.DeviceID == 0 &&
!p.UserAgentString1.Contains("msie"));
//WORKS
userAgentStrings.ToList().ForEach(uas => ProcessUserAgentString(uas));
//WORKS
Array.ForEach(userAgentStrings.ToArray(), uas => ProcessUserAgentString(uas));
//Doesn't WORK
userAgentStrings.ForEach(uas => ProcessUserAgentString(uas));