CA1836:在可用時偏好 IsEmpty 而不是 Count

屬性
規則識別碼 CA1836
職稱 建議使用 IsEmpty,而不要使用 Count (如果有的話)
類別 效能
修正是造成中斷還是不中斷 不中斷
在 .NET 10 中預設啟用 作為建議
適用語言 C# 與 Visual Basic

原因

CountLength 屬性或 Count<TSource>(IEnumerable<TSource>) 擴充方法是用來判斷物件是否包含任何專案,方法是將值與 01 進行比較,而該物件還有更有效率的 IsEmpty 屬性可以改用。

規則描述

此規則會在使用 CountLength 屬性或 Count<TSource>(IEnumerable<TSource>)LongCount<TSource>(IEnumerable<TSource>) LINQ 方法的呼叫,以判斷物件是否包含任何項目時進行標示,當物件具有一個更有效的 IsEmpty 屬性時。

此規則的分析原本與類似規則 CA1827、CA1828 和 CA1829 重疊;這些規則的分析器已合併至 CA1836 的分析器,以便在重疊時提供最佳分析結果。

如何修正違規

若要修正違規,當在作業中使用 Count<TSource>(IEnumerable<TSource>)LongCount<TSource>(IEnumerable<TSource>) 方法呼叫,或 LengthCount 屬性存取來判斷物件是否為空時,請以 IsEmpty 屬性存取取代。 例如,下列兩個代碼段會顯示違反規則,以及如何修正它:

using System.Collections.Concurrent;

class C
{
    ConcurrentQueue<int> _queue;
    public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;

class C
{
    ConcurrentQueue<int> _queue;
    public bool IsEmpty => _queue.IsEmpty;
}

提示

在 Visual Studio 中,可以使用針對此規則的程式碼修正。 若要使用它,請將游標放在違規上,然後按 Ctrl+。(句號)。 選擇 [偏好 'IsEmpty' 而不是 'Count'] 以判斷物件是否包含任何項目],從所呈現的選項列表中選擇

CA1836 的程式碼修正 - 偏好使用 'IsEmpty' 而非 'Count' 來判斷物件是否包含任何項目

隱藏警告的時機

如果您不擔心不必要項目列舉對計算計數的效能影響,則抑制此規則的違規是安全的。

隱藏警告

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

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

若要停用檔案、資料夾或專案的規則,請在組態檔中將其嚴重性設為 none

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

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

另請參閱