Метод расширения IDictionary для добавления, если ключ отсутствует - PullRequest
0 голосов
/ 20 сентября 2018

Этот старый ответ предлагает создать метод расширения для этой цели, но ответу 9 лет, так что C #, вероятно, с тех пор, вероятно, отличается, или я не понимаю реализацию.

В настоящее время я пытаюсь это сделать:

public static void AddIfNotPresent(this IDictionary<TKey, TValue> dict, TKey key, TValue value)
{
    if (!dict.ContainsKey(key))
    {
        dict.Add(value);
    }
}

... но Visual Studio говорит: "Тип или пространство имен TKey не может быть найдено ...", то же самое для значения ... Почему можнодобавить эти произвольные типы в метод расширения?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

TKey и TValue должны быть параметрами типа AddIfNotPresent, а AddIfNotPresent должны быть определены в статическом классе.

void Main()
{
    var dictionary = new Dictionary<string, string>();
    dictionary.AddIfNotPresent("key", "value");
    Console.WriteLine($"{dictionary.First().Key} = {dictionary.First().Value}");

    // Output: key = value
}

public static class DictionaryExtensions
{
    public static void AddIfNotPresent<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue value)
    {
        if (!dict.ContainsKey(key))
        {
            dict.Add(key, value);
        }
    }
}
0 голосов
/ 20 сентября 2018

Ваш AddIfNotPresent не определяет эти общие типы / аргументы (AddIfNotPresent<TKey, TValue>).В этом ответе не хватает опечаток.

...