CA1028: 列挙ストレージは Int32 でなければなりません

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

カテゴリ

Microsoft.Design

互換性に影響する変更点

あり

原因

パブリックの列挙体の基になる型が、System.Int32 ではありません。

規則の説明

列挙型は、関連する名前付き定数が複数定義された値型です。 既定で、System.Int32 データ型は、定数値を格納するために使用されます。 この基になる型を変更できる場合でも、ほとんどの場合、変更する必要はありませんし、推奨されません。 Int32 よりも小さいデータ型を使用しても、パフォーマンスはあまり向上しません。 既定のデータ型を使用できない場合、Common Language System (CLS) 準拠の整数型、ByteInt16Int32Int64 のいずれかを使用して、列挙値のすべてが CLS 準拠のプログラミング言語で表すことができるようにします。

違反の修正方法

この規則違反を修正するには、サイズや互換性の問題がなければ、Int32 を使用します。 Int32 のサイズでは値を格納できない場合、Int64 を使用します。 下位互換性のために小さなデータ型が必要な場合、Byte または Int16 を使用します。

警告を抑制する状況

下位互換性の問題で必要な場合にのみ、この規則による警告を抑制します。 一般に、アプリケーションでは、この規則に準拠しないことによって問題は発生しません。 言語の相互運用性が必要なライブラリの場合、この規則に準拠しないことで、ライブラリを使用するときに悪影響が及ぶ可能性があります。

違反の例

説明

基になるデータ型に推奨される型を使用していない 2 つの列挙型を次の例に示します。

コード

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: Enums は 0 値を含んでいなければなりません

CA1027: FlagsAttribute で列挙値をマークします

CA2217: enums を FlagsAttribute に設定しません

CA1700: enum 値に 'Reserved' という名前を指定しません

CA1712: enum 値を型名のプレフィックスにしません

参照

参照

System.Byte

System.Int16

System.Int32

System.Int64