字典:类似于upset的用法[compact syntax]

时间:2014-02-21 11:24:54

标签: c# .net dictionary

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

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

它是否存在紧凑的语法?

4 个答案:

答案 0 :(得分:9)

Item {{1}}属性:

  

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

存在紧凑的语法

答案 1 :(得分:3)

p["a"] = "2";

相当于

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

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

答案 2 :(得分:1)

我有这种扩展方法:

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

它保持当前值(如果存在),但如果是新的则添加它。

答案 3 :(得分:0)

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

E.g。

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