Использование метода расширения в словаре - PullRequest
0 голосов
/ 08 июля 2011

Я не уверен, как использовать метод расширения в словаре.Как мне указать, что мне нужна функция, примененная к значению, а не к ключу?

Вот пример кода, применяющего метод расширения Sum к списку значений типа double и словарь, значения которого являются значениями типа double.Методы расширения списка работают нормально, но метод расширения словаря запрашивает функцию выбора.

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

Ответы [ 4 ]

3 голосов
/ 08 июля 2011

Вы должны передать лямбду в функцию Sum ():

Console.WriteLine(dictioanary.Sum(kvp => kvp.Value));
1 голос
/ 08 июля 2011

я бы сделал что-то вроде этого:

public static int MyExtension<valueType,keyType>(this Dictionary<valueType,keyType> dict )
{
  return dict.Values.Sum();
}
1 голос
/ 08 июля 2011

Вы можете использовать Values коллекцию словаря.

0 голосов
/ 08 июля 2011

Свойство словаря Values является ICollection<T>. ( Ссылка ) Вместо написания собственного метода расширения следует использовать расширения 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();
    }
...