ConcurrentDictionary.AddOrUpdate中的ArgumentNullException

时间:2016-12-25 23:16:06

标签: c# .net containers

我在调用AddOrUpdate的{​​{1}}方法时遇到了一些奇怪的行为:

ConcurrentDictionary

抛出static void Main(string[] args) { var t = new ConcurrentDictionary<string, object>(); t.AddOrUpdate("boo", null, (k, v) => null); }

ArgumentNullException

为什么呢?我不允许将System.ArgumentNullException was unhandled HResult=-2147467261 Message=Value cannot be null. Parameter name: addValueFactory ParamName=addValueFactory Source=mscorlib StackTrace: at System.Collections.Concurrent.ConcurrentDictionary`2.AddOrUpdate(TKey key, Func`2 addValueFactory, Func`3 updateValueFactory) at ConcurrentDictionaryTest.Program.Main(String[] args) 作为值添加到并发字典中吗?文档没有说明null作为值有什么特别之处,以下工作正常:

null

那么,发生了什么?

1 个答案:

答案 0 :(得分:2)

有关您正在使用的重载,请参阅documentation。第二个参数应该是当键不存在时调用的函数。你可以自由地从这个函数返回null,但你仍然需要提供它。

[func(*args) for args in zip(a1, a2, .., an)]

如果您想使用other overload,可以使用强制转换:

t.AddOrUpdate("boo", k => null, (k, v) => null);