CA1028:列舉儲存區應該是 Int32
屬性 | 值 |
---|---|
規則識別碼 | CA1028 |
標題 | 列舉儲存區應該是 Int32 |
類別 | 設計 |
修正程式是中斷或非中斷 | 中斷 |
預設在 .NET 8 中啟用 | No |
原因
列舉的基礎型別不是 System.Int32。
根據預設,此規則只會查看外部可見的列舉,但這是可設定的。
檔案描述
列舉類型是一種實值類型 (Value Type),用以定義一組相關的具名常數。 根據預設, System.Int32 數據類型會用來儲存常數值。 雖然您可以變更此基礎類型,但大部分案例都不需要或建議使用。 使用小於 Int32的數據類型來達成任何顯著的效能提升。 如果您無法使用預設數據類型,則應該使用其中一個 Common Language System (CLS)相容的整數類型、 Byte、 Int16、 Int32或 Int64 ,以確保列舉的所有值都可以以符合 CLS 規範的程式設計語言來表示。
如何修正違規
若要修正此規則的違規,除非存在大小或相容性問題,請使用 Int32。 Int32如果沒有足夠的大小來儲存值,請使用 Int64。 如果回溯相容性需要較小的數據類型,請使用 Byte 或 Int16。
隱藏警告的時機
只有在回溯相容性問題需要時,才隱藏此規則的警告。 在應用程式中,不符合此規則通常不會造成問題。 在需要語言互操作性的連結庫中,不符合此規則可能會對您的使用者造成負面影響。
隱藏警告
如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。
#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028
若要停用檔案、資料夾或項目的規則,請在組態檔中將其嚴重性設定為 。none
[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none
如需詳細資訊,請參閱 如何隱藏程式代碼分析警告。
設定程式代碼以分析
使用下列選項來設定程式代碼基底要執行此規則的部分。
您可以只針對此規則、針對它套用的所有規則,或針對套用至此類別的所有規則,或針對它套用的所有規則,設定此選項。 如需詳細資訊,請參閱 程式代碼品質規則組態選項。
包含特定 API 介面
您可以根據程式代碼基底的存取範圍,設定要執行此規則的部分。 例如,若要指定規則只應該針對非公用 API 介面執行,請將下列機碼/值組新增至 專案中的 .editorconfig 檔案:
dotnet_code_quality.CAXXXX.api_surface = private, internal
範例
下列範例顯示兩個不使用建議基礎數據類型的列舉。
[Flags]
public enum Days : uint
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : sbyte
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As UInteger
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As SByte
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
下列範例會將基礎數據類型變更為 Int32,以修正先前的違規。
[Flags]
public enum Days : int
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : int
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As Integer
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As Integer
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
相關規則
- CA1008:列舉值中應該要有值為零的成員
- CA1027:必須以 FlagsAttribute 標記列舉
- CA2217:不要以 FlagsAttribute 標記列舉
- CA1700:不要在列舉值名稱中包含 'Reserved'
- CA1712:不要使用類型名稱作為列舉值的前置字元