C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のType.GetEnumValues()メソッドとは?使い方をサンプルコード付きで解説

C#のType.GetEnumValues()メソッドは、現在の列挙型(enum)に含まれる定数の値を配列(Array)として返します。この記事では、基本的な構文から実際の使用例まで、サンプルコードを交えながらわかりやすく解説します。

構文

Type.GetEnumValues()メソッドの構文は以下の通りです。

public virtual Array GetEnumValues();

使用例1:列挙型以外の型に呼び出した場合

まず、列挙型ではない型(ここではint型)に対してType.GetEnumValues()メソッドを呼び出した例を見てみましょう。対象が列挙型ではないため、ArgumentExceptionがスローされます。

using System;
public class Demo {
    enum Vehicle {Car, Bus, Bike, Airplane}
    public static void Main(){
        try {
            Type type = typeof(int);
            string[] str = type.GetEnumNames();
            Console.WriteLine("GetEnumNames()で取得した定数名 = " + str);
            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("列挙型の基になる型 = " + type2);
            Array arrObj = type.GetEnumValues();
            Console.Write("値 = {0}" + arrObj);
            Console.WriteLine("\n定数の一覧を表示します..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e){
            Console.WriteLine("列挙型ではありません!");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

出力結果

上記のコードを実行すると、以下のような出力が得られます。

列挙型ではありません!
System.ArgumentException

使用例2:実際の列挙型に呼び出した場合

続いて、正しく列挙型(Vehicle)に対してType.GetEnumValues()メソッドを呼び出した例を見てみましょう。

using System;
public class Demo {
    enum Vehicle {Car, Bus, Bike, Airplane}
    public static void Main(){
        try {
            Vehicle v = Vehicle.Bike;
            Type type = v.GetType();
            string[] str = type.GetEnumNames();
            Console.WriteLine("GetEnumName()で取得した定数名 = " + str);
            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("列挙型の基になる型 = " + type2);
            Array arrObj = type.GetEnumValues();
            Console.Write("値 = " + arrObj);
            Console.WriteLine("\n定数の一覧を表示します..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e){
            Console.WriteLine("列挙型ではありません!");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

出力結果

上記のコードを実行すると、以下のような出力が得られます。

GetEnumName()で取得した定数名 = System.String[]
列挙型の基になる型 = System.Int32値 = Demo+Vehicle[]
定数の一覧を表示します..
Car Bus Bike Airplane

ポイントまとめ

  • Type.GetEnumValues():列挙型のすべての定数値をArrayとして返します。
  • Type.GetEnumNames():列挙型の定数名をstring型の配列として返します。
  • Type.GetEnumUnderlyingType():列挙型の基となる型(デフォルトはint=Int32)を返します。
  • これらのメソッドを列挙型以外の型に対して呼び出すとArgumentExceptionがスローされるため、try-catchによる例外処理を組み合わせるのが安全です。
  1. C#のType.GetArrayRank()メソッドの使い方を徹底解説

    C#におけるType.GetArrayRank()メソッドは、配列の次元数(ランク)を取得するためのメソッドです。多次元配列が何次元であるかをプログラム上で確認したい場合に便利な機能です。構文public virtual int GetArrayRank ();このメソッドは、対象の型が配列である場合にその次元数をint型で返します。戻り値の「ランク」とは、配列の角括弧内のカンマの数+1、つまり配列のインデックスの数を表します。使用例1:3次元配列のランクを取得するまずは、3次元のint型配列に対してType.GetArrayRank()メソッドを使用する基本的な例を見てみましょう。using

  2. C#のType.Equals()メソッドとは?使い方とサンプルコードを解説

    C#のType.Equals()メソッドは、現在のTypeインスタンスが表す基盤となるシステム型が、指定されたObjectまたはTypeの基盤となるシステム型と同一であるかどうかを判定します。リフレクション処理などで型同士を比較したい場合に役立つメソッドです。 構文 public virtual bool Equals (Type o); public override bool Equals (object o); パラメータ o:現在のTypeの基盤となるシステム型と比較する対象となるオブジェクトまたは型を指定します。 戻り値 両方の基盤システム型が同じ場合は true、異なる場合は fa