だから、私は ConcurrentDictionary に甘やかされてきましたが、それは素晴らしいTryGetValue
方法です。ただし、通常の Dictionary のみを使用するように制限されています。これは、携帯電話やその他のプラットフォームを対象とするポータブル クラス ライブラリに含まれているためです。Dictionary の非常に限られたサブセットを作成し、それをスレッドセーフな方法で公開しようとしています。
基本的にGetOrAdd
、ConcurrentDictionary のようなものが必要です。現在、私はこれを次のように実装しています:
lock (lockdictionary)
{
if (!dictionary.ContainsKey(name))
{
value = new foo();
dictionary[name] = value;
}
value = dictionary[name];
}
これは基本的に私が手に入れることができるのと同じくらい良いですか?キーが存在せず、追加された場合にのみロックが必要だと思いますが、「存在する場合は値を取得し、それ以外の場合は null を返す」という適切な方法はありません。ContainsKey ビットを省略した場合、キーが存在しない場合、キーが存在しないために例外が発生します。
とにかくこれをより無駄のないバージョンにすることはできますか? それとも、これは通常の辞書でできる最善のことですか?