【问题标题】:IDictionary Extension method for Adding if key not present如果键不存在,则用于添加的 IDictionary 扩展方法
【发布时间】:2019-02-25 02:19:27
【问题描述】:

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...”,值相同...为什么我不能将这些任意类型添加到扩展方法中?

【问题讨论】:

  • 您必须将这些类型参数作为泛型参数添加到方法中。他们不会推断。 public static void AddIfNotPresent&lt;TKey, TValue&gt;(this ....
  • 如果密钥已经存在?您想丢弃传递给方法的值吗?
  • 如果你的目标是 .net core 2.0+,有一个 TryAdd 方法到 Dictionary

标签: c# extension-methods


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的 AddIfNotPresent 没有定义那些泛型类型/参数 (AddIfNotPresent&lt;TKey, TValue&gt;)。该答案缺少那些错字。

    【讨论】:

      猜你喜欢
      • 2021-07-19
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2017-02-10
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      相关资源
      最近更新 更多