我与两位同事讨论了IEnumerable上的迭代设置(其内容在操作期间不会以任何方式更改)。存在三种相互矛盾的理论,哪一种是最佳方法。其他人(以及我)都非常确定,这让我不确定,所以为了清楚起见,我想与外部来源核实。
场景如下。我们以下面的代码为起点,发现不需要对某些hazaas采取行动。所以,从下面的代码开始,我们开始为动作添加一个拦截器。
foreach(Hazaa hazaa in hazaas) ;
我的建议如下。
foreach(Hazaa hazaa in hazaas.Where(element => condition)) ;
其中一个人想通过更明确的形式解决它,声称 LINQ 在这种情况下不合适(不知道为什么会这样,但他似乎非常确信)。他的解决方案是这样的。
foreach(Hazaa hazaa in hazaas) ;
if(condition) ;
另一个相反的建议得到了支持,即Where有不必要地重复过滤过程的风险,并且通过Select一次性选择适当的元素可以更确定地最小化计算工作量。
foreach(Hazaa hazaa in hazaas.Select(element => condition)) ;
我认为第一个已经过时了,因为 LINQ 可以很好地处理数据对象。
我也相信Select -ing 在这种情况下与Where -ing 相当快,并且不会采取不必要的步骤(例如,对元素条件的评估只会执行一次)。如果有的话,使用Where应该会更快,因为我们不会创建任何东西的额外实例。
谁是对的?