CA1028:列舉儲存區應該是 Int32

屬性
規則識別碼 CA1028
標題 列舉儲存區應該是 Int32
類別 設計
修正程式是中斷或非中斷 中斷
預設在 .NET 8 中啟用 No

原因

列舉的基礎型別不是 System.Int32

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

檔案描述

列舉類型是一種實值類型 (Value Type),用以定義一組相關的具名常數。 根據預設, System.Int32 數據類型會用來儲存常數值。 雖然您可以變更此基礎類型,但大部分案例都不需要或建議使用。 使用小於 Int32的數據類型來達成任何顯著的效能提升。 如果您無法使用預設數據類型,則應該使用其中一個 Common Language System (CLS)相容的整數類型、 ByteInt16Int32Int64 ,以確保列舉的所有值都可以以符合 CLS 規範的程式設計語言來表示。

如何修正違規

若要修正此規則的違規,除非存在大小或相容性問題,請使用 Int32Int32如果沒有足夠的大小來儲存值,請使用 Int64。 如果回溯相容性需要較小的數據類型,請使用 ByteInt16

隱藏警告的時機

只有在回溯相容性問題需要時,才隱藏此規則的警告。 在應用程式中,不符合此規則通常不會造成問題。 在需要語言互操作性的連結庫中,不符合此規則可能會對您的使用者造成負面影響。

隱藏警告

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

#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

另請參閱