は、ここで私はDictionary
に何かを追加:すでに存在しているディクショナリArgumentExceptionログ重複キー:よりパフォーマンスが良いですか?
dictionary.Add(dictionaryKey, value);
dictionaryKey
場合、ArgumentException
がスローされます。そのメッセージはかなり一般的です:
同じキーを持つアイテムが既に追加されています。
dictionary.Add
に私の呼び出しはループやヘルパー関数の内部にある場合
、すでにそれがこの例外をスローして追加されたものをキー即座に伝えるのは難しいことができます。私はこれをできるだけ早く簡単に知りたいです。
いくつかのオプションがあります。
1)
if(dictionary.ContainsKey(dictionaryKey)
{
throw new ArgumentException($"An item with the same key ({dictionaryKey}) has already been added.");
}
dictionary.Add(dictionaryKey, value);
2)
try
{
dictionary.Add(dictionaryKey, value);
}
catch(ArgumentException argumentException)
{
throw new ArgumentException($"An item with the same key ({dictionaryKey}) has already been added.");
}
3)私は、try/catchブロックを設定する知っているいくつかの他の方法
は、パフォーマンスヒットがかかりますが、それはdictionary.ContainsKey(dictionaryKey)
を実行しているようです毎回追加の検索も意味します。どちらのオプションが最も効果的ですか?
辞書にはO(1)の複雑さだけが含まれているため、私は最初のアプローチに行きます。そのような場合には、例外処理を使用すべきではありません。 –
try/catchブロックはパフォーマンスヒットをまったく引き起こさないので、例外がスローされます –
挿入されていたもののエラーメッセージには、まだ表示されていないはずですか? – jth41