2011-01-25 5 views

答えて

28

あなたは、あなたが組み込みの静的ForEachメソッドを使用することができ、配列を扱っている場合:List<T>を扱っているなら、あなたはForEachインスタンス組み込みメソッドを使用することができます

Array.ForEach(yourArray, x => Console.WriteLine(x)); 

を:

yourList.ForEach(x => Console.WriteLine(x)); 

は、内蔵のものの任意のIEnumerable<T>配列に対してうまくいくものは何もありませんが、それはあなたがそれを必要と感じた場合、独自の拡張メソッドを巻くだけ簡単です:

yourSequence.ForEach(x => Console.WriteLine(x)); 

// ... 

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

     foreach (T item in source) 
     { 
      action(item); 
     } 
    } 
} 
+0

奇妙なことに、このようなものは組み込まれていません。もし私がPythonパターンに従えば、新しい列挙体を構築するのに 'Select'を使うでしょうか? – Domi

3

foreachラインライナーは、LINQの拡張メソッドを用いて達成することができます。

の代わり:

var result = new List<string>(); 
foreach (var item in someCollection) 
{ 
    result.Add(item.Title); 
} 

あなたは可能性があります。たとえば

var result = someCollection.Select(x => x.Title).ToList(); 
2

確かに、あなたはList<>::ForEachのようなものを使用することができます。

List<String> s = new List<string>(); 
    s.Add("These"); 
    s.Add("Is"); 
    s.Add("Some"); 
    s.Add("Data"); 
    s.ForEach(_string => Console.WriteLine(_string)); 
0

場合とオペレータとの間の主な違いを?それは、文が "?"式を生成する。私。もしこれを行うことはできません。

 

var _ = (exp) ? then : else; // ok 
 

ではなく、この:あなたはforeachの表現のようなものを探しているなら、それは当然のボイドを除いて返すことができます何の.NETタイプが存在しないので、

 

var _ = if (exp) { then; } else { else; }; // error 
 

を、しかし、そこにvoid型のない値はないので、あなたは均等にだけ書くことができます:ユニットタイプではなく、一つの値だけで入力しているボイドの使用されている多くの関数型言語では

 

foreach (var item in collection) process(item); 
 

。これを.NETでエミュレートし、独自のforeach式を作成することができます。

 

    class Unit 
    { 
     public override bool Equals(object obj) 
     { 
      return true; 
     } 

     public override int GetHashCode() 
     { 
      return 0; 
     } 
    } 

    public static class EnumerableEx 
    { 
     public static Unit ForEach<TSource>(
      this IEnumerable<TSource> source, 
      Action<TSource> action) 
     { 
      foreach (var item in source) 
      { 
       action(item); 
      } 

      return new Unit(); 
     } 
    } 
 

このような式にはほとんどのケースがありません。

関連する問題