2011-07-07 49 views
0

我不确定如何在字典上使用扩展方法。我如何指定我需要将函数应用于值而不是密钥?在字典上使用扩展方法

下面是一个示例代码,将双精度扩展方法应用于双精度值和双精度值的字典。列表扩展方法工作正常,但字典扩展方法要求选择器功能。

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

你有一个lambda传递给sum()函数:

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(); 
    }