在這裏,我補充一下到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