考虑下面的代码:为什么在使用ConcurrentDictionary时不能将null添加为值?
// holds the actual values
private volatile ConcurrentDictionary<string, Object> values;
public object this[string key] {
get {
// exception is thrown on this line
return values.GetOrAdd(key, null);
}
set {
values.AddOrUpdate(key, value, (k, v) => value);
}
}
我想要做的就是简单地创建了字典中的条目;如果不存在,就;它应该没有价值,直到明确地设置它。我得到这个例外:
An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
Additional information: Value cannot be null.
该文件指出,键不能为空,这是有道理的。为什么我得到这个异常的值虽然?我不理解这种方法吗?
@sstan“附加信息:**值**不能为空。” –
@sstan OP就是这么写的。 –
由于字典的全部用途是允许使用键来查找值,因此允许使用空值是没有意义的。如果密钥没有值,那它就不属于字典,就像IRL一样,一个字在定义之前不属于字典。你在字典里找不到未定义的单词,是吗? –