CA1028: 列挙ストレージは Int32 でなければなりません
TypeName |
EnumStorageShouldBeInt32 |
CheckId |
CA1028 |
[カテゴリ] |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
パブリックの列挙体の基になる型が、System.Int32 ではありません。
規則の説明
列挙型は、関連する名前付き定数が複数定義された値型です。既定で、System.Int32 データ型は、定数値を格納するために使用されます。この基になる型を変更できる場合でも、ほとんどの場合、変更する必要はありませんし、推奨されません。Int32 よりも小さいデータ型を使用しても、パフォーマンスはあまり向上しません。既定のデータ型を使用できない場合、Common Language System (CLS) 準拠の整数型、Byte、Int16、Int32、Int64 のいずれかを使用して、列挙値のすべてが CLS 準拠のプログラミング言語で表すことができるようにします。
違反の修正方法
この規則違反を修正するには、サイズや互換性の問題がなければ、Int32 を使用します。Int32 のサイズでは値を格納できない場合、Int64 を使用します。下位互換性のために小さなデータ型が必要な場合、Byte または Int16 を使用します。
警告を抑制する状況
下位互換性の問題で必要な場合にのみ、この規則による警告を抑制します。一般に、アプリケーションでは、この規則に準拠しないことによって問題は発生しません。言語の相互運用性が必要なライブラリの場合、この規則に準拠しないことで、ライブラリを使用するときに悪影響が及ぶ可能性があります。
違反の例
Description
基になるデータ型に推奨される型を使用していない 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
}
}
修正方法の例
Description
基になるデータ型を 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 値を型名のプレフィックスにしません