【问题标题】:Dictionary: upset-like usage [compact syntax]字典:类似不安的用法[紧凑语法]
【发布时间】:2014-02-21 11:24:53
【问题描述】:

我想用一些简短的语法做类似的事情:

var p = new Dictionary<string, string>();
p["a"] = "2";
p["a"] = "3";

我必须这样做:

if (p.ContainsKey("a"))
    p["a"] = "2";
else
    p.Add("a", "2");

if (p.ContainsKey("a"))
    p["a"] = "3";
else
    p.Add("a", "3");

是否存在紧凑的语法?

【问题讨论】:

  • 你总是可以创建方法来做到这一点
  • 你可以做你想做的事...p["a"] = "2"; 是有效的,即使密钥还不存在
  • @elmugrat:对不起,你是对的。你能回答而不是评论吗?我会接受的。问题是我没有初始化字典。
  • 另外:你知道p.Add("3") 是不正确的,对吧?
  • @Sam 只是接受 Rudis 的回答,是一样的 :)

标签: c# .net dictionary


【解决方案1】:

通过MSDNItem 属性:

如果找不到指定的键,get 操作会抛出 KeyNotFoundException,而 set 操作会使用指定的键创建一个新元素。

存在如此紧凑的语法

【讨论】:

    【解决方案2】:
    p["a"] = "2";
    

    等价于

    if (!p.ContainsKey("a"))
        p.Add("a", "2");
    else
        p["a"] = "2";
    

    实际上应该首选第一个,因为它执行得更快。

    【讨论】:

      【解决方案3】:

      我有这个扩展方法:

      public static void AddOrKeep<K, V>(this IDictionary<K, V> dictionary, K key, V val)
      {
          if (!dictionary.ContainsKey(key))
          {
              dictionary.Add(key, val);
          }
      }
      

      像这样使用它:

      dict.AddOrKeep("a", "2");
      

      如果存在则保留当前值,如果是新值则添加。

      【讨论】:

        【解决方案4】:

        您可以使用ContainsKey字典方法来检查特定的Key是否包含字典。

        例如

        if (!p.ContainsKey("a"))
        {
        p.Add("a","2");
        }
        else
        {
        p["a"] = "2";
        }
        

        【讨论】:

          猜你喜欢
          • 2012-07-08
          • 1970-01-01
          • 1970-01-01
          • 2020-08-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多