共用方式為


CA1028:列舉儲存區應該是 Int32

型別名稱

EnumStorageShouldBeInt32

CheckId

CA1028

分類

Microsoft.Design

中斷變更

中斷

原因

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

規則描述

列舉型別是一種實值型別 (Value Type),用以定義一組相關的具名常數。 根據預設,System.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:不要使用型別名稱做為列舉值的前置字元

請參閱

參考

System.Byte

System.Int16

System.Int32

System.Int64