閱讀英文

共用方式為


CA1868:對集合不必要呼叫 'Contains'

屬性
規則識別碼 CA1868
職稱 對集合不必要呼叫 'Contains'
類別 效能
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 建議

原因

ISet<T>.AddICollection<T>.Remove 呼叫是由的Contains呼叫所保護。 或者, IImmutableSet<T>.AddIImmutableSet<T>.Remove 呼叫是由的 IImmutableSet<T>.Contains呼叫所保護。

檔案描述

ISet<T>.Add(T) 都會ICollection<T>.Remove(T)執行查閱,讓其事先呼叫ICollection<T>.Contains(T)變得備援。 呼叫或Add(T)直接呼叫Remove(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>.Add(T)IImmutableSet<T>.Remove(T)

範例

下列代碼段顯示 CA1868 的違規:

C#
void Run(ISet<string> set)
{
    if (!set.Contains("Hello World"))
    {
        set.Add("Hello World");
    }
}

下列代碼段會修正違規:

C#
void Run(ISet<string> set)
{
    set.Add("Hello World");
}

隱藏警告的時機

如果效能不相關,則隱藏此警告是安全的。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

C#
#pragma warning disable CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868

若要停用檔案、資料夾或項目的規則,請在組態檔none

ini
[*.{cs,vb}]
dotnet_diagnostic.CA1868.severity = none

如需詳細資訊,請參閱 如何隱藏程式代碼分析警告