は、次のコードを考えてみましょう: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.
ドキュメントには、キーはnullにすることはできません。意味があります。しかし、なぜ私は値のためのこの例外を得ていますか?この方法を理解していないのですか?
@sstan "追加情報:**バリュー**をnullにすることはできません。 –
@sstanそれはOPが書いたものです。 –
ディクショナリの目的はすべて、値をルックアップするためにキーを使用できるようにすることであるため、NULL値を許可することは意味がありません。キーに値がない場合、辞書には属しません。IRLのように、単語が定義されるまで辞書には属しません。あなたは辞書に未定義の言葉を見つけませんか? –