私は適用のような組み込みの拡張方法を探しています:コレクションに含まれるすべての項目にメソッドを適用します「適用」のようなコレクションに組み込みの拡張メソッドがありますか?
collection.Apply (predicate)
。
私はすでに存在するものを書かないようにまず尋ねています。
EDIT:私がforeachを使用しなかった理由は、LINQを使ってメソッドを表現したいからです。
私は適用のような組み込みの拡張方法を探しています:コレクションに含まれるすべての項目にメソッドを適用します「適用」のようなコレクションに組み込みの拡張メソッドがありますか?
collection.Apply (predicate)
。
私はすでに存在するものを書かないようにまず尋ねています。
EDIT:私がforeachを使用しなかった理由は、LINQを使ってメソッドを表現したいからです。
まあ、ですが、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);
これは、関数型プログラミングへのより多くの露出の後、私はしかし、より頻繁にそれを使用したいことも可能です。
ありがとうジョン。あなたはEMのためのそのようなツールキットを知っていますか?私はネットをチェックしましたが、どんなツールキット/クラスよりも多くのドキュメントを示しています。 –
さて、私自身のMoreLINQプロジェクトがあります:http://code.google.com/p/morelinq/ –
ありがとうジョン、私はあなたになるつもりです:) –
そのようなものがあるかどうかはわかりませんが、foreachを使用しない理由は、そのメソッドをすべてのアイテムに適用しているからです。
IEnumerable<T>
、ICollection<T>
、またはIList<T>
のいずれも存在しないことは間違いありません。
list.ForEach(delegate);
を個人的に、私はこのような方法にいずれかの真の価値をしないでください。
List<T>
クラスは、しかし、あなたのような使用できる汎用的なForEach
方法(ビルトイン、ない拡張子)を有し、 。シンプルなforeachループでは、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デザインでインテリセンスの重要性を過小評価しないでください。
コードサンプルのためにありがとうアレックス。 –
[LINQ for foreach for IEnumerable]の可能な複製(http://stackoverflow.com/questions/200574/linq-equivalent-of-foreach-for-ienumerablet) –
nawfal