この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語
このドキュメントはアーカイブされており、メンテナンスされていません。

Enum クラス

更新 : 2010 年 6 月

列挙体の基本クラスを提供します。

名前空間:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType, 
	IComparable, IFormattable, IConvertible

Enum 型で公開されるメンバーは以下のとおりです。

  名前説明
プロテクト メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifEnum Enum クラスの新しいインスタンスを初期化します。
このページのトップへ

  名前説明
パブリック メソッドXNA Framework によるサポートCompareTo指定したオブジェクトとこのインスタンスを比較し、これらの相対値を示す値を返します。
パブリック メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifEquals対象のインスタンスが、指定したオブジェクトに等しいかどうかを示す値を返します。 (ValueType.Equals(Object) をオーバーライドします。)
プロテクト メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifFinalizeオブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッド静的メンバーFormat指定した形式に従って、指定した列挙型の指定した値をそれと等価の文字列形式に変換します。
パブリック メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifGetHashCodeこのインスタンスの値のハッシュ コードを返します。 (ValueType.GetHashCode() をオーバーライドします。)
パブリック メソッド静的メンバー1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifGetName指定した値を持つ指定した列挙体にある定数の名前を取得します。
パブリック メソッド静的メンバーGetNames指定した列挙体に含まれている定数の名前の配列を取得します。
パブリック メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドXNA Framework によるサポートGetTypeCodeこのインスタンスの基になる TypeCode を返します。
パブリック メソッド静的メンバーXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifGetUnderlyingType指定した列挙体の基になる型を返します。
パブリック メソッド静的メンバーGetValues指定した列挙体内の定数の値の配列を取得します。
パブリック メソッドHasFlag現在のインスタンスで 1 つ以上のビット フィールドが設定されているかどうかを判断します。
パブリック メソッド静的メンバーXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifIsDefined指定した値を持つ定数が指定した列挙体に存在するかどうかを示す値を返します。
プロテクト メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッド静的メンバーParse(Type, String)1 つ以上の列挙定数の名前または数値の文字列形式を、等価の列挙オブジェクトに変換します。
パブリック メソッド静的メンバーXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifParse(Type, String, Boolean)1 つ以上の列挙定数の名前または数値の文字列形式を、等価の列挙オブジェクトに変換します。 演算で大文字と小文字を区別するかどうかをパラメーターで指定します。
パブリック メソッド静的メンバーToObject(Type, Byte)指定した 8 ビット符号なし整数を列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, Int16)指定した 16 ビット符号付き整数を列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, Int32)指定した 32 ビット符号付き整数を列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, Int64)指定した 64 ビット符号付き整数を列挙メンバーに変換します。
パブリック メソッド静的メンバーXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifToObject(Type, Object)整数値を持つ指定したオブジェクトを列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, SByte)指定した 8 ビット符号付き整数値を列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, UInt16)指定した 16 ビット符号なし整数値を列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, UInt32)指定した 32 ビット符号なし整数値を列挙メンバーに変換します。
パブリック メソッド静的メンバーToObject(Type, UInt64)指定した 64 ビット符号なし整数値を列挙メンバーに変換します。
パブリック メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifToString()このインスタンスの値を、それと等価の文字列形式に変換します。 (ValueType.ToString() をオーバーライドします。)
パブリック メソッドXNA Framework によるサポートToString(IFormatProvider) 互換性のために残されています。 このメソッドのオーバーロードは今後使用しません。代わりに Enum.ToString() を使用します。
パブリック メソッドXNA Framework によるサポート1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifToString(String)指定した書式を使用して、このインスタンスの値をそれと等価な文字列形式に変換します。
パブリック メソッドXNA Framework によるサポートToString(String, IFormatProvider) 互換性のために残されています。 このメソッドのオーバーロードは今後使用しません。代わりに Enum.ToString(String) を使用します。
パブリック メソッド静的メンバーTryParse<TEnum>(String, TEnum)1 つ以上の列挙定数の名前または数値の文字列形式を、等価の列挙オブジェクトに変換します。 戻り値は、変換が成功したかどうかを示します。
パブリック メソッド静的メンバーTryParse<TEnum>(String, Boolean, TEnum)1 つ以上の列挙定数の名前または数値の文字列形式を、等価の列挙オブジェクトに変換します。 演算で大文字と小文字を区別するかどうかをパラメーターで指定します。 戻り値は、変換が成功したかどうかを示します。
このページのトップへ

  名前説明
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToBooleanインフラストラクチャ。 基になる型に基づいて、現在の値をブール値に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToByteインフラストラクチャ。 基になる型に基づいて、現在の値を 8 ビット符号なし整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToCharインフラストラクチャ。 基になる型に基づいて、現在の値を Unicode 文字に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToDateTimeインフラストラクチャ。 基になる型に基づいて、現在の値を DateTime に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToDecimalインフラストラクチャ。 基になる型に基づいて、現在の値を Decimal に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToDoubleインフラストラクチャ。 基になる型に基づいて、現在の値を倍精度浮動小数点数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToInt16インフラストラクチャ。 基になる型に基づいて、現在の値を 16 ビット符号付き整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToInt32インフラストラクチャ。 基になる型に基づいて、現在の値を 32 ビット符号付き整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToInt64インフラストラクチャ。 基になる型に基づいて、現在の値を 64 ビット符号付き整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToSByteインフラストラクチャ。 基になる型に基づいて、現在の値を 8 ビット符号付き整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToSingleインフラストラクチャ。 基になる型に基づいて、現在の値を単精度浮動小数点数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToTypeインフラストラクチャ。 基になる型に基づいて、現在の値を指定した型に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToUInt16インフラストラクチャ。 基になる型に基づいて、現在の値を 16 ビット符号なし整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToUInt32インフラストラクチャ。 基になる型に基づいて、現在の値を 32 ビット符号なし整数に変換します。
明示的なインターフェイス実装プライベート メソッドXNA Framework によるサポートIConvertible.ToUInt64インフラストラクチャ。 基になる型に基づいて、現在の値を 64 ビット符号なし整数に変換します。
明示的なインターフェイス実装プライベート メソッド1zt1ybx4.PortableClassLibrary(ja-jp,VS.100).gifIFormattable.ToString
このページのトップへ

列挙体は、基になる型が Char 以外の整数型である名前付き定数のセットです。 基になる型が明示的に宣言されない場合は、Int32 が使用されます。 Enum は、.NET Framework におけるすべての列挙体の基本クラスです。

Enum には、このクラスの複数のインスタンスを比較したり、インスタンスの値を文字列形式に変換したり、数値の文字列形式をこのクラスのインスタンスに変換したり、指定した列挙体および値のインスタンスを作成するためのメソッドが用意されています。

列挙体をビット フィールドとして扱うこともできます。 詳細については、「Non-Exclusive Members and the Flags Attribute (非排他的なメンバーとフラグ属性)」セクションおよび FlagsAttribute のトピックを参照してください。

列挙型の作成

通常、プログラミング言語には、名前付き定数とその値の組み合わせから成る列挙体を宣言する構文が用意されています。 次の例では、列挙を定義するために C# および Visual Basic によって使用される構文を示します。 ArrivalStatus.EarlyArrivalStatus.OnTime、および ArrivalStatus.Late の 3 つのメンバーを持つ、ArrivalStatus という名前の列挙型を作成します。 どちらのケースでも、列挙型は Enum から明示的に継承しないことに注意してください。継承関係は、コンパイラによって暗黙的に処理されます。


public enum ArrivalStatus { Late=-1, OnTime=0, Early=1 };


Caution メモ注意

基になる型が非整数型の列挙型は作成しないでください。 リフレクションを使用してそのような列挙型を作成することができますが、結果の型を使用するメソッド呼び出しは信頼性が低く、追加の例外がスローされることがあります。

列挙型のインスタンス化

他の値型をインスタンス化するのとまったく同様に列挙型をインスタンス化できます。変数を宣言し、列挙型の定数のいずれかを変数に割り当てます。 次の例では、値が ArrivalStatus.OnTime である ArrivalStatus をインスタンス化します。


public class Example
{
   public static void Main()
   {
      ArrivalStatus status = ArrivalStatus.OnTime;
      Console.WriteLine("Arrival Status: {0} ({0:D})", status);
   }
}
// The example displays the following output:
//       Arrival Status: OnTime (0)


次の方法を使用して列挙値をインスタンス化することもできます。

  • 特定のプログラミング言語の機能を使用して、整数値を列挙値にキャスト (C# の場合) または変換 (Visual Basic の場合) する。 値が ArrivalStatus.EarlyArrivalStatus オブジェクトをこの方法で作成する例を次に示します。

    
    ArrivalStatus status2 = (ArrivalStatus) 1;
    Console.WriteLine("Arrival Status: {0} ({0:D})", status2);
    // The example displays the following output:
    //       Arrival Status: Early (1)
    
    
    
  • 暗黙の既定コンストラクターを呼び出します。 次の例に示すように、この場合、列挙体のインスタンスの基になる値は 0 です。 ただし、これは必ずしも列挙型の有効な定数の値ではありません。

    
    ArrivalStatus status1 = new ArrivalStatus();
    Console.WriteLine("Arrival Status: {0} ({0:D})", status1);
    // The example displays the following output:
    //       Arrival Status: OnTime (0)
    
    
    
  • Parse メソッドまたは TryParse メソッドを呼び出して、列挙体の定数の名前を含む文字列を解析する。 詳細については、「列挙値の解析」を参照してください。

  • ToObject メソッドを呼び出して、整数値を列挙型に変換する。 詳細については、「Performing Conversions (変換の実行)」セクションを参照してください。

列挙型のベスト プラクティス

列挙型を定義するときは、次のベスト プラクティスを使用することをお勧めします。

  • 値が 0 の列挙型のメンバーを定義していない場合は、None 列挙型定数の作成を検討してください。 既定では、列挙体に使用されるメモリが共通言語ランタイムによって 0 に初期化されます。 その結果、値が 0 である定数を定義しなかった場合、列挙体には作成時に無効な値が含まれます。

  • アプリケーションで、既定の状態を表す必要がある場合は、値が 0 である列挙定数を使用してその状態を表すことを検討してください。 既定の状態がない場合は、他の列挙定数では表現されない状態を指定するために、値が 0 の列挙定数の使用を検討してください。

  • 今後使用するために予約されている列挙定数を指定しないでください。

  • 列挙定数を値として受け取るメソッドまたはプロパティを定義する場合は、値を検証することを検討してください。 数値が列挙体に定義されていない場合も、数値を列挙型にキャストできるからです。

定数がビット フィールドの列挙型の追加のベスト プラクティスについては、「非排他的なメンバーとフラグ属性」セクションを参照してください。

列挙型を使用した操作の実行

列挙体を作成しているときは、新しいメソッドを定義できません。 ただし、列挙型は、Enum クラスから静的メソッドおよびインスタンス メソッドの完全なセットを継承します。 次のセクションでは、これらのメソッドの多くに加えて、列挙値を操作するときによく使用されるその他のいくつかのメソッドについて説明します。

変換の実行

キャスト演算子 (C# ) または変換演算子 (Visual Basic) を使用すると、列挙体のメンバーとその基になる型の変換を行うことができます。 次の例では、大文字/小文字または変換の演算子を使用して、整数から列挙値への変換と、列挙値から整数への変換の両方を実行します。


int value3 = 2;
ArrivalStatus status3 = (ArrivalStatus) value3;

int value4 = (int) status3;


Enum クラスには、任意の整数型の値を列挙値に変換する ToObject メソッドも含まれています。 次の例では、ToObject メソッドを使用して、Int32ArrivalStatus 値に変換示します。 ToObject Object 型の値を返すため、オブジェクトを列挙型に設定するためにキャストまたは変換演算子を使用する必要があります。


int number = -1;
ArrivalStatus arrived = (ArrivalStatus) ArrivalStatus.ToObject(typeof(ArrivalStatus), number);


整数を列挙値に変換するとき、実際には列挙体のメンバーでない値を割り当てることができます。 これを防ぐには、変換を実行する前に、IsDefined メソッドに整数を渡します。 次の例では、このメソッドを使用して、整数値の配列内の要素を ArrivalStatus 値に変換できるかどうかを確認します。


using System;

public enum ArrivalStatus { Unknown=-3, Late=-1, OnTime=0, Early=1 };

public class Example
{
   public static void Main()
   {
      int[] values = { -3, -1, 0, 1, 5, Int32.MaxValue };
      foreach (var value in values)
      {
         ArrivalStatus status;
         if (Enum.IsDefined(typeof(ArrivalStatus), value))
            status = (ArrivalStatus) value;
         else
            status = ArrivalStatus.Unknown;
         Console.WriteLine("Converted {0:N0} to {1}", value, status);
      }
   }
}
// The example displays the following output:
//       Converted -3 to Unknown
//       Converted -1 to Late
//       Converted 0 to OnTime
//       Converted 1 to Early
//       Converted 5 to Unknown
//       Converted 2,147,483,647 to Unknown


Enum クラスは列挙値から整数型に変換するための IConvertible インターフェイスの明示的なインターフェイスの実装を提供しますが、そうした変換を実行するには、ToInt32 など、Convert クラスのメソッドを使用する必要があります。 次の例では、GetUnderlyingType メソッドと Convert.ChangeType メソッドを使用して、列挙値を基になる型へ変換する方法を示します。 この例では、列挙型の基になる型がコンパイル時にわかっている必要はありません。


ArrivalStatus status = ArrivalStatus.Early;
var number = Convert.ChangeType(status, Enum.GetUnderlyingType(typeof(ArrivalStatus)));
Console.WriteLine("Converted {0} to {1}", status, number);
// The example displays the following output:
//       Converted Early to 1


列挙値の解析

Parse および TryParse メソッドを使用すると、列挙値の文字列表現をその値に変換できます。 可能な文字列表現は、列挙定数の名前か、または基になる値です。 解析メソッドは、列挙型の基になる型の値に文字列を変換できる場合、特定の列挙型のメンバーではない数値の文字列表現を正常に変換できます。 これを防ぐには、IsDefined メソッドを呼び出して、解析メソッドの結果が有効な列挙値になるように保証します。 この例では、このアプローチを説明し、Parse メソッドと Enum.TryParse<TEnum>(String, TEnum)メソッドの両方への呼び出しをデモンストレーションします。 非ジェネリック解析メソッドは、適切な列挙型にキャスト (C# の場合) または変換 (Visual Basic の場合) することが必要になる場合があるオブジェクトを返します。


string number = "-1";
string name = "Early";

try {
   ArrivalStatus status1 = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), number);
   if (!(Enum.IsDefined(typeof(ArrivalStatus), status1)))
      status1 = ArrivalStatus.Unknown;
   Console.WriteLine("Converted '{0}' to {1}", number, status1);
}
catch (FormatException) {
   Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", 
                     number);
}   

ArrivalStatus status2;
if (Enum.TryParse<ArrivalStatus>(name, out status2)) {
   if (!(Enum.IsDefined(typeof(ArrivalStatus), status2)))
      status2 = ArrivalStatus.Unknown;
   Console.WriteLine("Converted '{0}' to {1}", name, status2);
}
else {
   Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", 
                     number);
}
// The example displays the following output:
//       Converted '-1' to Late
//       Converted 'Early' to Early


列挙値の書式設定

静的な Format メソッドおよびインスタンス ToString メソッドのオーバーロードを呼び出して、列挙値を文字列表現に変換できます。 書式指定文字列を使用して、列挙値が文字列として表現される正確な方法を制御できます。 詳細については、「列挙型書式指定文字列」を参照してください。 次の例では、サポートされている列挙型書式指定文字列を使用して、ArrivalStatus 列挙体のメンバーを文字列表現に変換します。


string[] formats= { "G", "F", "D", "X"};
ArrivalStatus status = ArrivalStatus.Late;
foreach (var fmt in formats)
   Console.WriteLine(status.ToString(fmt));

// The example displays the following output:
//       Late
//       Late
//       -1
//       FFFFFFFF


列挙型メンバーの反復処理

Enum 型は、foreach (C# の場合) または For Each (Visual Basic の場合) 構造体を使用することによってコレクションのメンバーを反復処理できる、IEnumerable または IEnumerable<T> インターフェイスを実装しません。 ただし、メンバーを次の 2 つの方法で列挙できます。

  • GetNames メソッドを呼び出して、列挙体メンバーの名前を含む文字列配列を取得できます。 次に、文字列配列の各要素に対して Parse メソッドを呼び出して、文字列を等価の列挙値に変換します。 このアプローチの例を次に示します。

    
    string[] names = Enum.GetNames(typeof(ArrivalStatus));
    Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name);
    Array.Sort(names);
    foreach (var name in names) {
       ArrivalStatus status = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), name);
       Console.WriteLine("   {0} ({0:D})", status);
    }
    // The example displays the following output:
    //       Members of ArrivalStatus:
    //          Early (1)
    //          Late (-1)
    //          OnTime (0)
    //          Unknown (-3)      
    
    
    
  • GetValues メソッドを呼び出して、列挙体の基になる値を含む配列を取得できます。 次に、配列の各要素に対して ToObject メソッドを呼び出して、整数を等価の列挙値に変換します。 このアプローチの例を次に示します。

    
    var values = Enum.GetValues(typeof(ArrivalStatus));
    Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name);
    foreach (var value in values) {
       ArrivalStatus status = (ArrivalStatus) Enum.ToObject(typeof(ArrivalStatus), value);
       Console.WriteLine("   {0} ({0:D})", status);
    }                                       
    // The example displays the following output:
    //       Members of ArrivalStatus:
    //          OnTime (0)
    //          Early (1)
    //          Unknown (-3)
    //          Late (-1)
    
    
    

非排他的なメンバーとフラグ属性

列挙値の一般的な用途の 1 つは、相互に排他的な値のセットを表すことです。 たとえば、ArrivalStatus のインスタンスは、値 EarlyOnTime、または Late を持つことができます。 ArrivalStatus のインスタンスの値が複数の列挙定数を反映することに意味はありません。

ただし、他のケースでは、列挙オブジェクトの値には複数の列挙メンバーを含めることができ、各メンバーは列挙値のビット フィールドを表します。 FlagsAttribute 属性は、列挙体がビット フィールドで構成されることを示すために使用できます。 たとえば、家庭のペットの種類を示すために、Pets という名前の列挙を使用します。 次のように定義されます。


[Flags] public enum Pets { None=0, Dog=1, Cat=2, Bird=4, Rodent=8,
                           Reptile=16, Other=32 };



Pets 列挙体はその後、次の例で示されているように使用できます。


Pets familyPets = Pets.Dog | Pets.Cat;
Console.WriteLine("Pets: {0:G} ({0:D})", familyPets);
// The example displays the following output:
//       Pets: Dog, Cat (3)      


ビットごとの列挙体を定義し、FlagsAttribute 属性を適用するときには、次のベスト プラクティスを使用する必要があります。

  • ビットごとの演算 (AND、OR、EXCLUSIVE OR) が数値で実行される場合のみ、列挙体の FlagsAttribute カスタム属性を使用します。

  • 列挙定数を 2 の累乗 (1、2、4、8 など) で定義してください。 これは、結合された列挙定数の各フラグが重複しないことを意味します。

  • よく使われるフラグの組み合わせに対して列挙定数を作成することを検討してください。 たとえば、列挙定数の Read = 1 および Write = 2 を含むファイル I/O 操作に使用される列挙体を持っている場合は、Read フラグと Write フラグを結合する列挙定数 ReadWrite = Read OR Write を作成することが考えられます。 場合によっては、フラグを結合するために使用されるビットごとの OR 演算は、単純なタスクには必要のない高度な概念と見なされます。

  • フラグ列挙定数として負数を定義する場合は、多数のフラグの位置が 1 に設定される場合があるので注意してください。その結果、コードが混乱してコーディング エラーの原因となる可能性があります。

  • フラグが数値で設定されているかどうかをテストする便利な方法は、次の例に示すように、HasFlag インスタンス メソッドを呼び出すことです。

    
    Pets familyPets = Pets.Dog | Pets.Cat;
    if (familyPets.HasFlag(Pets.Dog))
       Console.WriteLine("The family has a dog.");
    // The example displays the following output:
    //       The family has a dog.      
    
    
    

    これは、数値とフラグ列挙定数の間でビットごとの AND 演算を実行することと同じです。この操作では、フラグに対応しない数値内のすべてのビットが 0 に設定されます。次に、その演算の結果がフラグ列挙定数に等しいかどうかをテストします。 この操作を次の例に示します。

    
    Pets familyPets = Pets.Dog | Pets.Cat;
    if ((familyPets & Pets.Dog) == Pets.Dog)
       Console.WriteLine("The family has a dog.");
    // The example displays the following output:
    //       The family has a dog.      
    
    
    
  • 値が 0 であるフラグ列挙定数の名前として None を使用します。 フラグをテストするためにビットごとの AND 演算を実行する場合、None 列挙定数は結果が常に 0 になるので使用できません。 ただし、数値と None 列挙定数の間で、ビットごとではなく論理的な比較を実行して、数値のビットが設定されているかどうかを判断できます。 この操作を次の例に示します。

    
    Pets familyPets = Pets.Dog | Pets.Cat;
    if (familyPets == Pets.None)
       Console.WriteLine("The family has no pets.");
    else
       Console.WriteLine("The family has pets.");   
    // The example displays the following output:
    //       The family has pets.      
    
    
    
  • 列挙体そのものの状態を反映するだけの列挙値を定義しないでください。 たとえば、列挙体の末尾をマークするだけの列挙定数は定義しないでください。 列挙体の末尾の値を確認する必要がある場合は、その値を明示的にチェックしてください。 また、範囲内のすべての値が有効である場合は、先頭と末尾の列挙定数を確認する範囲のチェックを実行できます。

名前付きの値を表す列挙体と、名前付きのビット フィールドを表す別の列挙体を使用する例を次に示します。


using System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celsius = 100, Fahrenheit = 212 };
    [FlagsAttribute]
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static void Main() {

        Type weekdays = typeof(Days);
        Type boiling = typeof(BoilingPoints);

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

        foreach ( string s in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

        foreach ( string s in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));

        Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);
    }
}


.NET Framework

サポート対象: 4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

サポート対象: 4、3.5 SP1

サポート対象:

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

この型は、スレッド セーフです。

日付

History

理由

2010 年 6 月

全面的に改訂。

カスタマー フィードバック

表示: