【发布时间】:2010-10-25 22:19:56
【问题描述】:
可能重复:
Why is there not a ForEach extension method on the IEnumerable interface?
编辑
作为参考,这里是 eric 在 cmets 中提到的博文
https://ericlippert.com/2009/05/18/foreach-vs-foreach/
ORIG
我想更多的是一种好奇心,但对于 C# 规范专家来说……
为什么 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));
【问题讨论】:
-
我会把
ForEach(uac => ProcessUserAgentString(uas))写成ForEach(ProcessUserAgentString)。 -
传统的 for-each 循环有什么问题? foreach (var uas in UserAgentStrings) ProcessUserAgentString(uas);
-
没有问题...就像我说的那样,为什么约定可用于数组/列表但不能用于 IQueryables/IEnumerables 更令人好奇,正如 Eric Lippert 在下面指出的那样,它是开发团队完全出于哲学的选择,而不是出于任何技术原因
-
以下是关于如何可能成为可能的另一种想法:visualstudio.uservoice.com/forums/121579-visual-studio-2015/…
标签: c# .net-3.5 lambda foreach