我在调用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
那么,发生了什么?
答案 0 :(得分:2)
有关您正在使用的重载,请参阅documentation。第二个参数应该是当键不存在时调用的函数。你可以自由地从这个函数返回null,但你仍然需要提供它。
[func(*args) for args in zip(a1, a2, .., an)]
如果您想使用other overload,可以使用强制转换:
t.AddOrUpdate("boo", k => null, (k, v) => null);