C# 这些枚举代码在功能上是否相同? foreach(在this.Effects.Where(e=>e.IsTransparentEffect&&e.HasGPUSupport)中的效果) 收益-收益-新实时效应(效应);
vsC# 这些枚举代码在功能上是否相同? foreach(在this.Effects.Where(e=>e.IsTransparentEffect&&e.HasGPUSupport)中的效果) 收益-收益-新实时效应(效应);,c#,.net,linq,ienumerable,C#,.net,Linq,Ienumerable,vs this.Effects.Where(e=>e.IsTransparentEffect&&e.HasGPUSupport) 。选择(e=>newrealtimeffect(e)); 我不知何故认为,Select会尝试以不同的方式收集结果,而不是像#1 还会有性能差异吗?两个代码将返回相同的结果。两者都具有延迟执行(即,在开始枚举结果之前,实际上不会执行任何操作)和流式处理结果(即未缓冲)。这两个版本之间不应该有显著的性能差异,它在功能上完全相同(尽管我认为在LINQ示例中缺少新的关键字是
this.Effects.Where(e=>e.IsTransparentEffect&&e.HasGPUSupport)
。选择(e=>newrealtimeffect(e));
我不知何故认为,Select会尝试以不同的方式收集结果,而不是像#1
还会有性能差异吗?两个代码将返回相同的结果。两者都具有延迟执行(即,在开始枚举结果之前,实际上不会执行任何操作)和流式处理结果(即未缓冲)。这两个版本之间不应该有显著的性能差异,它在功能上完全相同(尽管我认为在LINQ示例中缺少
新的关键字是打字错误)
Select中有一些空检查,但这不太可能显著影响性能
Jon Skeet在他的博客上写得很好:谢谢添加了新的关键字。
foreach ( Effect effect in this.Effects.Where ( e => e.IsTransparentEffect && e.HasGPUSupport ) )
yield return new RealtimeEffect<TransparentEffect> ( effect );
this.Effects.Where ( e => e.IsTransparentEffect && e.HasGPUSupport )
.Select ( e => new RealtimeEffect<TransparentEffect> ( e ) );