使用的Foreach条款LA​​MBDA防爆pression [英] Lambda Expression using Foreach Clause

查看:154
本文介绍了使用的Foreach条款LA​​MBDA防爆pression的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  

可能重复:
  <一href="http://stackoverflow.com/questions/101265/why-is-there-not-a-foreach-extension-method-on-the-ienumerable-interface">Why是不是有IEnumerable接口上一个foreach扩展方法?

修改

有关引用,这里的博客文章中评论这埃里克referrrred到

<一个href="http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx">http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

更多的是好奇,我想,但一个是C#规格学者...

为什么是它给ForEach()子句不工作(或不可用)对IQueryable的使用/ IEnumerable的结果集...

您必须首先将你的结果了ToList()或的ToArray() presumably那里有一个技术限制的方式C#迭代IEnumerables比。列表... 它是什么做的延迟执行的的IEnumerables / IQuerable集合。 例如,

  VAR userAgentStrings = uasdc.UserAgentStrings
    。凡&LT; UserAgentString&GT;(P =&GT; p.DeviceID == 0安培;&安培;
                            !p.UserAgentString1.Contains(MSIE));
//作品
。userAgentStrings.ToList()的ForEach(UAS =&GT; ProcessUserAgentString(UAS));

//作品
Array.ForEach(userAgentStrings.ToArray(),UAS =&GT; ProcessUserAgentString(UAS));

//不起作用
userAgentStrings.ForEach(UAS =&GT; ProcessUserAgentString(UAS));
 

解决方案

这是多么惊人的巧合,我刚才写的这个问题非常的博客文章。它<打击>为 公布5月18日。没有任何技术原因,我们(或者你!)无法做到这一点。究其原因,并非是哲学。见我下周的博客我的说法。

Possible Duplicate:
Why is there not a ForEach extension method on the IEnumerable interface?

EDIT

For reference, here's the blog post which eric referrrred to in the comments

http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

ORIG

More of a curiosity I suppose but one for the C# Specification Savants...

Why is it that the ForEach() clause doesn't work (or isn't available) for use on IQueryable/IEnumerable result sets...

You have to first convert your results ToList() or ToArray() Presumably theres a technical limitation to the way C# iterates IEnumerables Vs. Lists... Is it something to do with the Deferred Execution's of IEnumerables/IQuerable Collections. e.g.

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));

解决方案

What an amazing coincidence, I just now wrote a blog article about this very question. It will be was published May 18th. There is no technical reason why we (or you!) couldn't do this. The reasons why not are philosophical. See my blog next week for my argument.

这篇关于使用的Foreach条款LA​​MBDA防爆pression的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆