共用方式為


CA2217:不要以 FlagsAttribute 標記列舉

屬性
規則識別碼 CA2217
職稱 不要以 FlagsAttribute 標記列舉
類別 使用方式
修正程式是中斷或非中斷 不中斷
預設在 .NET 9 中啟用 No

原因

列舉會標示為 FlagsAttribute ,而且其具有一或多個值,這些值不是兩個的乘冪,或是列舉上其他定義值的組合。

根據預設,此規則只會查看外部可見的列舉,但這是可設定

檔案描述

只有在列舉中定義的每個值都是兩個或已定義值的組合時,列舉才應該 FlagsAttribute 存在。

如何修正違規

若要修正此規則的違規,請從 列舉中移除 FlagsAttribute

隱藏警告的時機

請勿隱藏此規則的警告。

設定程式代碼以分析

使用下列選項來設定程式代碼基底要執行此規則的部分。

您可以只針對此規則、它套用的所有規則,或針對套用至此類別的所有規則(使用方式)設定這個選項。 如需詳細資訊,請參閱 程式代碼品質規則組態選項

包含特定 API 介面

您可以根據程式代碼基底的存取範圍,設定要執行此規則的部分。 例如,若要指定規則只應該針對非公用 API 介面執行,請將下列機碼/值組新增至 專案中的 .editorconfig 檔案:

dotnet_code_quality.CAXXXX.api_surface = private, internal

範例

下列程式代碼顯示包含值 3 的列舉 Color。 3 不是兩個的乘冪,也不是任何已定義值的組合。 Color列舉不應以FlagsAttribute標示。

// Violates this rule    
[FlagsAttribute]
public enum Color
{
    None = 0,
    Red = 1,
    Orange = 3,
    Yellow = 4
}
Imports System

Namespace Samples

    ' Violates this rule    
    <FlagsAttribute()> _
    Public Enum Color

        None = 0
        Red = 1
        Orange = 3
        Yellow = 4

    End Enum
End Namespace

下列程式代碼顯示列舉 , Days其符合以 FlagsAttribute標記的需求:

[FlagsAttribute]
public enum Days
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    All = Monday | Tuesday | Wednesday | Thursday | Friday
}
Imports System
Namespace Samples

    <FlagsAttribute()> _
    Public Enum Days

        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday

    End Enum
End Namespace

CA1027:必須以 FlagsAttribute 標記列舉

另請參閱