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 標記列舉