如果密钥不存在,则添加IDictionary扩展方法

时间:2018-09-20 17:57:37

标签: c# extension-methods

This old answer建议为此创建扩展方法,但答案已有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 :(得分:3)

TKeyTValue应该是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);
        }
    }
}

答案 1 :(得分:0)

您的AddIfNotPresent未定义那些通用类型/参数(AddIfNotPresent<TKey, TValue>)。该答案缺少拼写错误。