Добавление (т.е. +) метод расширения с помощью общего словаря C # - PullRequest
0 голосов
/ 21 июня 2011

Я пытаюсь написать общий метод расширения словаря, как это.TValue всегда будет int, но TKey может быть строкой или DateTime.

public static void AddOrIncrement<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value) 
{
    if (!dict.ContainsKey(key))
    {
        dict.Add(key, value);
    }
    else
    {
        dict[key] += value;
    }
}

Но это не скомпилируется - оператор + не может быть применен к операндам типа TValue и TValue'.

Итак, я пытаюсь:

public static void AddOrIncrement<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value) where TValue : int

, но это тоже не компилируется.Тогда я попытался:

public static void AddOrIncrement<TKey, int>(this Dictionary<TKey, int> dict, TKey key, int value)

, который не компилируется - «Объявление параметра типа должно быть идентификатором, а не типом»

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Вы пытаетесь создать метод расширения, который принимает только один универсальный параметр:

public static void AddOrIncrement<TKey>(this Dictionary<TKey, int> dict, TKey key, int value)
4 голосов
/ 21 июня 2011

Попробуйте:

public static void AddOrIncrement<TKey>(this Dictionary<TKey, int> dict, TKey key, int value)
...