分享方式:


CA2217:不要以 FlagsAttribute 標記列舉

屬性
規則識別碼 CA2217
標題 不要以 FlagsAttribute 標記列舉
類別 使用方式
修正程式是中斷或非中斷 不中斷
預設在 .NET 8 中啟用 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 標記列舉

另請參閱