Jac*_*hea 5 .net c# collections
首先,让我指定我引用的List<T>方法而不是C#关键字.微软在List<T>集合上使用Foreach方法但没有其他集合/可枚举类型的原因是IEnumerable<T>什么?
前几天我刚刚发现了这个方法,并发现它是一个非常好的语法,用于替换传统的foreach循环,它只对每个对象执行一行或两行方法.
看起来创建一个执行相同功能的扩展方法似乎相当简单.我想我正在考虑为什么MS做出这个决定并基于这个,如果我应该做一个扩展方法.
LBu*_*kin 18
Eric Lippert多次回答这个问题,包括在他的博客上.
他的反应ForEach()是你明确使用它的副作用 - 而LINQ主要是为了定义序列上的投影和操作的副作用免费API.
除了并行循环之类的用法之外,函数ForEach语法并没有增加表达能力的方式,并且foreach由于委托调用,它的效率略低于常规循环.
如果你真的,真的想要一个ForEachfor IEnumerable<T>,那么写一个并不难:
public static class ForEachExtension
{
public static void ForEach<T>( this IEnumerable<T> seq, Action<T> action )
{
foreach( var item in seq )
action( item );
}
// Here's a lazy, streaming version:
public static IEnumerable<T> ForEachLazy<T>( this IEnumerable<T> seq, Action<T> action )
{
foreach( var item in seq )
{
action( item );
yield return item;
}
}
}
Run Code Online (Sandbox Code Playgroud)