C# で列挙 Enum から整数 Int 値を取得する方法

Payel Ganguly 2023年1月30日 2020年9月26日
  1. enum から int に変換するための型キャストを指定する
  2. static クラスで enumint に変換する
  3. GetTypeCode() を用いて enum から int に変換する
  4. その他の例
C# で列挙 Enum から整数 Int 値を取得する方法

このチュートリアルでは、C# の enum から int 値を取得する方法を説明し、C# の列挙型の概要を把握するための一般的なコード例をいくつか挙げます。

Enum (Enumeration とも呼ばれます) は、ユーザ定義のデータ型または値型で、通常は基底となる積分型の定数の名前付き値のセットを定義します。キーワード enum は、コード内で列挙型を定義します。基本的な例を以下に示します。

enum Name
{
    Joe,
    Rick,
    John,
    Matt
}

定義済みの定数値の列挙型は、デフォルトではデータ型 int です。しかし、基本となる積分型は、sbytebyteshortushortintuintlongulong のような他の任意の積分数値型に明示的に設定することができます。以下の表に、C# で定義済みの各積分型のサイズと範囲を示します。

C# キーワード 整数サイズ 範囲
sbyte 符号付き 8 ビット [-128, 127]
byte 符号なしの 8 ビット [0, 255]
short 符号付き 16 ビット [-32,768, 32,767]
ushort 符号なしの 16 ビット [0, 65,535]
int 符号付き 32 ビット [-2,147,483,648, 2,147,483,647]
uint 符号なし 32 ビット [0, 4,294,967,295]
long 符号付き 64 ビット [-9,223,372,036,854,775,808, 9,223,372,036,854,775,807]
ulong 符号なしの 64 ビット [0, 18,446,744,073,709,551,615]

enum から int に変換するための型キャストを指定する

enum から int の値を取得するのは、データ型の中に課題があるため、見かけほど汎用的ではありません。次の例を見てください。

public enum Days
{
    Numbers = 20,
    DayType = 3
}
int abc = (int)Days.Numbers;
Console.WriteLine(abc);

出力:

20

enum には異なるデータ型が存在することがあり、プログラマにとっては少々厄介です。上のコードは Days enumint 値を abc に格納しています。この場合、エンティティのデータ型を別のデータ型に変更するためにタイプキャスティングメソッドが使用され、変数の正しい使用法が保証されます。しかし、タイプキャスティングを使用することは常に好ましいことではありません。

型キャスティングに依存しない方法があります。これらの方法については、以下のコード例で詳しく説明しています。

static クラスで enumint に変換する

using System;

class Demo
{
    public static class Subjects
    {
        public const int maths= 2;
        public const int science= 3;
        public const int english= 4;
        public const int history= 5;
    }
    public static void Main()
    {
        int xyz = Subjects.science;
        Console.WriteLine(xyz);
    }
}

出力:

3

上のコードは、Subjects.science が正しい整数値の型キャストを考えずに 3 の正しい値を取得していることを示しています。

GetTypeCode() を用いて enum から int に変換する

using System;

class Demo
{
    public enum Subjects
    {
        maths, science, english, history
    }
    public static void Main()
    {
        Subjects Maths = Subjects.maths;
        Object sub = Convert.GetTypeCode(Maths);
        Console.WriteLine(sub);
    }
}

出力:

Int32

static const を使いたくないプログラマは、上記の GetTypeCode() メソッドを使えばよいでしょう。上記のコードはすべて、列挙型から整数を抽出することに成功しています。以下の例は、より多くのアイデアを得るのに役立つでしょう。

その他の例

例 1:

using System;

class Demo
{
    public enum Positions
    {
        Role = 2,
        Project = 3,
        Jobs = 4
    }
  	public static void Main()
    {
        int a = (int)Positions.Jobs;
        Console.WriteLine(a);
    }
}

出力:

4

例 2:

using System;

class Demo
{
    public enum Galaxy:long
    {Sun = 1, S5HVS1 = 2, HD140283 = 2147977653};
  
    public static void Main()
    {
        long solar = (long)Galaxy.HD140283;
        Console.WriteLine(solar);
    }
}

出力:

2147977653

関連記事 - Csharp Integer

関連記事 - Csharp Enum