所以,我被 ConcurrentDictionary 宠坏了,这是一个很棒的TryGetValue
方法。但是,我只能使用常规 Dictionary,因为它位于针对手机和其他平台的可移植类库中。我正在尝试编写一个非常有限的 Dictionary 子集并以线程安全的方式公开它。
GetOrAdd
我基本上需要来自 ConcurrentDictionary 的东西。现在,我的实现如下:
lock (lockdictionary)
{
if (!dictionary.ContainsKey(name))
{
value = new foo();
dictionary[name] = value;
}
value = dictionary[name];
}
这基本上和我能得到的一样好吗?我认为只有在密钥不存在并且添加它时才真正需要锁定,但是,没有好的“如果存在则获取值,否则返回 null”方法。如果我要省略 ContainsKey 位,则当密钥不存在时,我会收到异常,因为密钥不存在。
无论如何我可以把它变成一个更精简的版本吗?或者这只是普通字典所能做的最好的吗?