C# で列挙 Enum から整数 Int 値を取得する方法
-
enum
からint
に変換するための型キャストを指定する -
static
クラスでenum
をint
に変換する -
GetTypeCode()
を用いてenum
からint
に変換する - その他の例
このチュートリアルでは、C# の enum
から int
値を取得する方法を説明し、C# の列挙型の概要を把握するための一般的なコード例をいくつか挙げます。
Enum
(Enumeration
とも呼ばれます) は、ユーザ定義のデータ型または値型で、通常は基底となる積分型の定数の名前付き値のセットを定義します。キーワード enum
は、コード内で列挙型を定義します。基本的な例を以下に示します。
enum Name { Joe, Rick, John, Matt }
定義済みの定数値の列挙型は、デフォルトではデータ型 int
です。しかし、基本となる積分型は、sbyte
、byte
、short
、ushort
、int
、uint
、long
、ulong
のような他の任意の積分数値型に明示的に設定することができます。以下の表に、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
enum
の int
値を abc
に格納しています。この場合、エンティティのデータ型を別のデータ型に変更するためにタイプキャスティングメソッドが使用され、変数の正しい使用法が保証されます。しかし、タイプキャスティングを使用することは常に好ましいことではありません。
型キャスティングに依存しない方法があります。これらの方法については、以下のコード例で詳しく説明しています。
static
クラスで enum
を int
に変換する
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