2009-05-09 9 views
2

私は適用のような組み込みの拡張方法を探しています:コレクションに含まれるすべての項目にメソッドを適用します「適用」のようなコレクションに組み込みの拡張メソッドがありますか?

collection.Apply (predicate) 

私はすでに存在するものを書かないようにまず尋ねています。

EDIT:私がforeachを使用しなかった理由は、LINQを使ってメソッドを表現したいからです。

+0

[LINQ for foreach for IEnumerable ]の可能な複製(http://stackoverflow.com/questions/200574/linq-equivalent-of-foreach-for-ienumerablet) – nawfal

答えて

3

まあ、ですが、IEnumerable<T>には何もありません。それは、サードパーティの「余分な拡張メソッド」ツールキットにたくさんあるものです:)

私は他の答えに同意しますforeachは通常、より良い方法です - 時には違いがあります:

DoSomething(x => x.Where(...).Select(...).ForEach(...)); 

1行だけよりも重要である
DoSomething(x => { 
    foreach (var y in x.Where(...).Select(...)) { 
     (...) 
    } 
}); 

通常はは、私がすでに代理人を手元に持っていた場合、または潜在的にメソッドグループを持っていた場合にのみ、このような方法を使用すると思います。例えば、それはフィルター処理されたコレクションをダンプするワンライナーを持つことができるように、非常にうれしいです:

people.Where(p => p.Age >= 18).ForEach(Console.WriteLine); 

これは、関数型プログラミングへのより多くの露出の後、私はしかし、より頻繁にそれを使用したいことも可能です。

+0

ありがとうジョン。あなたはEMのためのそのようなツールキットを知っていますか?私はネットをチェックしましたが、どんなツールキット/クラスよりも多くのドキュメントを示しています。 –

+2

さて、私自身のMoreLINQプロジェクトがあります:http://code.google.com/p/morelinq/ –

+0

ありがとうジョン、私はあなたになるつもりです:) –

0

そのようなものがあるかどうかはわかりませんが、foreachを使用しない理由は、そのメソッドをすべてのアイテムに適用しているからです。

1

IEnumerable<T>ICollection<T>、またはIList<T>のいずれも存在しないことは間違いありません。

list.ForEach(delegate); 

を個人的に、私はこのような方法にいずれかの真の価値をしないでください。

List<T>クラスは、しかし、あなたのような使用できる汎用的なForEach方法(ビルトイン、ない拡張子)を有し、 。シンプルなforeachループでは、1行でさらに使いやすく、同じ使いやすさを提供しますが、もちろんあなた自身を書くのを止めるものはありません。

1

私は機能性の丸薬などを飲み込んでしまったので、基本的にはForEach(...)拡張メソッドなしでは生きられません。

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action) 
{ 
    if (sequence == null) throw new ArgumentNullException("sequence"); 
    if (action == null) throw new ArgumentNullException("action"); 

    foreach (T t in sequence) 
     action(t); 
} 

これは、2行のコードを保存すると言われることもあります。 しかし、それ以上のことがあると思います。変数宣言を保存して、私の個人的な好みは、それがインテリセンスで本当にうまくいくということです。

すなわち

people.Where(p => p.Age < 38) 
     .Select(p => p.Firstname + " " + p.Surname) 
     .ForEach(fullname => Console.WriteLine(fullname)); 

intellisenseの力のためforeachループよりもはるかに簡単で素早く書くことができます。

APIデザインでインテリセンスの重要性を過小評価しないでください。

+0

コードサンプルのためにありがとうアレックス。 –