CA1864:偏好 'IDictionary.TryAdd(TKey, TValue)' 方法
屬性 | 值 |
---|---|
規則識別碼 | CA1864 |
職稱 | 偏好 'IDictionary.TryAdd(TKey, TValue)' 方法 |
類別 | 效能 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 建議 |
原因
Dictionary<TKey,TValue>.Add 受到呼叫的 Dictionary<TKey,TValue>.ContainsKey(TKey) 防護。
檔案描述
和 Dictionary<TKey,TValue>.Add 都會Dictionary<TKey,TValue>.ContainsKey(TKey)執行重複的查閱。 Dictionary<TKey,TValue>.Add 如果索引鍵已存在於字典中,也會擲回例外狀況。 呼叫 會更有效率地呼叫 Dictionary<TKey,TValue>.TryAdd,它會傳回布爾值,指出是否新增值。 TryAdd
如果索引鍵已經存在,則不會覆寫索引鍵的值。
如何修正違規
Dictionary<TKey,TValue>.ContainsKey(TKey)以對的單一呼叫取代 對 的呼叫Dictionary<TKey,TValue>.Add,後面接著呼叫 Dictionary<TKey,TValue>.TryAdd。
範例
下列代碼段顯示 CA1864 的違規:
void Run(IDictionary<int, string> dictionary)
{
if(!dictionary.ContainsKey(2)) {
dictionary.Add(2, "Hello World");
}
}
Sub Run(dictionary As IDictionary(Of Integer, String))
If Not dictionary.ContainsKey(2) Then
dictionary.Add(2, "Hello World")
End If
End Sub
下列代碼段會修正違規:
void Run(IDictionary<int, string> dictionary)
{
dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
dictionary.TryAdd(2, "Hello World")
End Sub
隱藏警告的時機
如果效能不相關,而且您處理 可能擲回的 Dictionary<TKey,TValue>.Add例外狀況,則隱藏此警告是安全的。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#pragma warning disable CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864
若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none
[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none
如需詳細資訊,請參閱 如何隱藏程式代碼分析警告。