CA1868:對集合不必要呼叫 'Contains'
屬性 | 值 |
---|---|
規則識別碼 | CA1868 |
職稱 | 對集合不必要呼叫 'Contains' |
類別 | 效能 |
修正程式是中斷或非中斷 | 不中斷 |
預設在 .NET 9 中啟用 | 建議 |
原因
ISet<T>.Add或 ICollection<T>.Remove 呼叫是由的Contains呼叫所保護。 或者, IImmutableSet<T>.Add 或 IImmutableSet<T>.Remove 呼叫是由的 IImmutableSet<T>.Contains呼叫所保護。
檔案描述
和 ICollection<T>.Remove(T) 都會ISet<T>.Add(T)執行查閱,讓其事先呼叫ICollection<T>.Contains(T)變得備援。 呼叫或Remove(T)直接呼叫Add(T)會更有效率,它會傳回 Boolean 值,指出專案是否已新增或移除。
此邏輯也適用於 IImmutableSet<T>.Add(T) 和 IImmutableSet<T>.Remove(T),不同之處在於,如果新增或移除專案,則會傳回新的集合,如果不是,則傳回原始集合。
如何修正違規
以ICollection<T>.Contains(T)對後者方法的單一呼叫取代對 (或IImmutableSet<T>.Contains(T)) 的呼叫,後面接著呼叫 ISet<T>.Add(T) 或 ICollection<T>.Remove(T) 或 IImmutableSet<T>.Remove(T)IImmutableSet<T>.Add(T) 。
範例
下列代碼段顯示 CA1868 的違規:
void Run(ISet<string> set)
{
if (!set.Contains("Hello World"))
{
set.Add("Hello World");
}
}
Sub Run(set As ISet(Of String))
If Not set.Contains("Hello World") Then
set.Add("Hello World")
End If
End Sub
下列代碼段會修正違規:
void Run(ISet<string> set)
{
set.Add("Hello World");
}
Sub Run(set As ISet(Of String))
set.Add("Hello World")
End Sub
隱藏警告的時機
如果效能不相關,則隱藏此警告是安全的。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#pragma warning disable CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868
若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none
[*.{cs,vb}]
dotnet_diagnostic.CA1868.severity = none
如需詳細資訊,請參閱 如何隱藏程式代碼分析警告。