2012-05-14 1 views
2

私のような何か書きたい:C#の数値範囲を反復処理するために各ラムダ式にaを書くにはどうすればよいですか?

(0 .. 7).ForEach(I =>のsomeMethod(i))を

を私は正しい構文を見つけることができない、あるいは、これはされていませんかC#で可能です。それができたら、正しい構文はどうですか?

+0

この質問に、このような高速応答のためのみんなに感謝を!大変感謝しています:) –

答えて

4

を見てください、あなたは幻と、よく知られたLINQ ForEachステートメントを追加する必要があります。

public static void ForEach<T>(this IEnumerable<T> source, Action<T> action) 
{ 
    foreach(T item in source) 
    { 
     action(item); 
    } 
} 

用途:

Enumerable.Range(0, 7).ForEach(i => SomeMethod(i)); 

Enumerable.Range(0, 7).ForEach(i => Console.WriteLine(i.ToString()); 

Enumerable.Range(0, 7).ForEach(i => 
{ 
    string oddEven = i % 2 == 0 ? "even" : "odd"; 
    Console.WriteLine(string.Format("{0} is {1}", i, oddEven)); 
} 

エキストラ読み取り

"foreach" vs "ForEach"

+0

+1素晴らしい解決策です。完全な答えになるための使用例を追加してください。 – SimpleVar

+0

私はこの解決策が好きです。フレームワークにはまだこの拡張メソッドが含まれていないということは私には奇妙に思えます。私が "foreach"と "ForEach"の記事を読んで、もっと学ぶほうがいいと思う。 –

+0

なぜそれが含まれていないのか、それが含まれない理由は次のとおりです。http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx –

4

あなたはEnumerable.Range Method

foreach (var i in Enumerable.Range(0, 7)) SomeMethod(i); 

を使用することができますし、@Richardが示唆したように、あなただけの行う、foreachの拡張メソッドを追加した場合:

Enumerable.Range(0, 7).ForEach(SomeMethod); 
+0

メソッドグループの使用は素晴らしい提案です。私はどのソリューションを好んでいたのか疑問に思っていましたが、今は拡張メソッドの方が良いと思います。 – SimpleVar

+0

私はYoryeと一緒です:この回答はupvoteの価値がありますが、Richardのソリューションが好きです。 –

+0

が合意した、私は個人的に自分のプロジェクトにForEach拡張メソッドを持っているが、それはBCLにはないので、最初は提案しなかった。私はリチャードの解決策をupvoted –

0

Enumerable.Range(0, 7).ToList().ForEach(i => whatever)

あなたはToListを必要とし、純粋なIEnumerable doesnのため'tはForEachです。 (あなたが必要な場合は、あなた自身で簡単に定義することができます)

また、7を含めたい場合は、Enumerable.Range(0, 7 + 1)とすることもできます。

0

はあなたが後にしているものを達成するためにEnumerable.Range();

関連する問題