字典‘Add`vs Set’Itemi‘

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

如果我想把物品放进System.Collections.Generic.Dictionary,我也可以Add或设置Item

我知道如果我们知道Add它检查密钥是否已经存在,如果不存在,则抛出异常。

因此,当添加一吨项目时,我是否更喜欢设置Item而不是Add自那以来Add是否有不必要的检查可能会使事情慢下来?

提问于
用户回答回答于

下面是设置项时发生的情况:

public void set_Item(TKey key, TValue value)
{
    this.Insert(key, value, false);
}

下面是添加项时发生的情况:

public void Add(TKey key, TValue value)
{
    this.Insert(key, value, true);
}

最后一个参数add参数只影响这一行:

if (add)
{
    ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
}

因此,如果在添加重复项时需要异常,则需要使用Add。如果要覆盖退出项,则需要设置项。

用户回答回答于

这取决于是要处理重复的键,还是要覆盖任何可能存在的项。若要检查可使用的副本,请使用:

  • ContainsKey方法若要检查密钥是否存在,请执行以下操作。
  • TryGetValue方法若要检查密钥是否存在,请获取可用的值。

例如:

var dict = new Dictionary<int, string>();

Console.WriteLine(dict.ContainsKey(1)); // false
dict[1] = "hi";
dict[1] = "hello"; // "hi" is overwritten

// true: hello
Console.WriteLine("{0}: {1}", dict.ContainsKey(1), dict[1]);

// TryGetValue if checking by key and interested in the value
string result;
if (dict.TryGetValue(1, out result))
{
    Console.WriteLine("Key 1 exists: " + result);
}
else
{
    Console.WriteLine("Key 1 not found");
}

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问6 回答
  • o o

    4 粉丝495 提问5 回答
  • 找虫虫

    5 粉丝0 提问5 回答
  • uncle_light

    5 粉丝518 提问4 回答

扫码关注云+社区

领取腾讯云代金券