共用方式為


CA1028:列舉儲存區應該是 Int32

型別名稱

EnumStorageShouldBeInt32

CheckId

CA1028

分類

Microsoft.Design

中斷變更

中斷

原因

公用列舉型別的基礎型別不是 Int32

規則描述

列舉型別是一種實值型別 (Value Type),用以定義一組相關的具名常數。根據預設,Int32 資料型別會用於儲存常數值。雖然您可以變更這個基礎型別,但是大多數案例中仍不需要或不建議進行變更。請注意,使用小於 Int32 的資料型別,無法有效改善效能。如果您無法使用預設資料型別,應該使用其中一個符合 Common Language System (CLS) 標準的整數類資料型別 (Integral Type)、ByteInt16Int32Int64,以確定所有的列舉值都可在符合 CLS 標準的程式語言中表示。

如何修正違規

若要修正此規則的違規情形,除非有大小或相容性的問題,否則請使用 Int32。針對 Int32 未大到可以儲存值的狀況,請使用 Int64。如果回溯相容性 (Backward Compatibility) 需要較小的資料型別,請使用 ByteInt16

隱藏警告的時機

只有在回溯相容性問題需要這樣做時,才需隱藏這項規則的警告。在應用程式中,無法遵守這項規則通常不會產生問題。在需要語言互通性 (Interoperability) 的程式庫中,無法遵守這項規則可能會對使用者產生不良影響。

違規範例

描述

下列範例會顯示沒有使用建議之基礎資料型別的兩個列舉型別。

程式碼

Imports System

Namespace Samples

    <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 

End Namespace
using System;

namespace DesignLibrary
{
   [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
   }
}

修正方式範例

描述

下列範例會藉由變更基礎資料型別為 Int32 來修正上述違規。

程式碼

Imports System

Namespace Samples

    <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 

End Namespace
using System;

namespace Samples
{
    [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
    }
}

相關規則

CA1008:列舉值中應該要有值為零的成員

CA1027:必須以 FlagsAttribute 標記列舉

CA2217:不要以 FlagsAttribute 標記列舉

CA1700:不要在列舉值名稱中包含 'Reserved'

CA1712:不要使用類型名稱做為列舉值的前置字元

請參閱

參考

Byte

Int16

Int32

Int64