Eoi*_*ell 50 c# foreach lambda .net-3.5
编辑
作为参考,这里是eric在评论中引用的博客文章
http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx
弊
我想更多的好奇心,但C#规范Savants的一个...
为什么ForEach()子句在IQueryable/IEnumerable结果集上不起作用(或不可用)...
你必须首先转换你的结果ToList()或ToArray()大概是对C#迭代IEnumerables Vs的方式的技术限制.列表......是否与IEnumerables/IQuerable Collections的延迟执行有关.例如
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));
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 14
ForEach为IEnumerable<T>.编写扩展方法是完全可能的.
我不确定为什么它不作为内置扩展方法包含在内:
ForEach已经存在于LINQ之前List<T>和Array之前.foreach循环迭代序列很容易.yield在执行操作后,很容易制作每个项目的可链接版本,但这种行为并不是特别直观.)public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in source)
{
action(item);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29757 次 |
| 最近记录: |