2011-07-07 13 views
0

辞書で拡張メソッドを使用する方法がわかりません。キーではなく値に適用される関数を必要とするように指定する方法を教えてください。辞書の拡張メソッドを使用する

ここでは、double型のリストと値がdouble型の辞書にSum拡張メソッドを適用するサンプルコードを示します。リスト拡張メソッドは正常に動作しますが、ディクショナリ拡張メソッドはセレクタ関数を要求しています。

static void Main(string[] args) 
    { 
     List<double> list = new List<double>(); 
     list.Add(34.2); 
     list.Add(234); 
     Console.WriteLine(list.Sum()); 

     Dictionary<string, double> dictioanary = new Dictionary<string, double>(); 
     dictioanary.Add("a", 5.34); 
     dictioanary.Add("b", 44); 

     Console.WriteLine(dictioanary.Sum()); 
     Console.ReadKey(); 
    } 

答えて

3

Console.WriteLine(dictioanary.Sum(kvp => kvp.Value)); 
1

あなたは辞書のValuesコレクションを使用することができます。

1

は、私はこのような何かをするだろう:

public static int MyExtension<valueType,keyType>(this Dictionary<valueType,keyType> dict) 
{ 
    return dict.Values.Sum(); 
} 
0

辞書のValuesプロパティがICollection<T>です。 (Link)独自の拡張メソッドを書くのではなく、Linqの拡張機能を使うべきです。

あなたは合計()関数にラムダを渡す必要が
using System.Linq; 

static void Main(string[] args) 
    { 
     List<double> list = new List<double>(); 
     list.Add(34.2); 
     list.Add(234); 
     Console.WriteLine(list.Sum()); 

     Dictionary<string, double> dictioanary = new Dictionary<string, double>(); 
     dictioanary.Add("a", 5.34); 
     dictioanary.Add("b", 44); 

     Console.WriteLine(dictioanary.Values.Sum()); // See? 
     Console.ReadKey(); 
    } 
関連する問題