次の方法で共有


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

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

分類

Microsoft.Design

互換性に影響する変更点

あり

原因

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

規則の説明

列挙型は、関連する名前付き定数が複数定義された値型です。既定で、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 値を型名のプレフィックスにしません

参照

関連項目

Byte

Int16

Int32

Int64