列挙型(Enum)は、特定の整数値に名前を付けたり、グループ化したりするための型です。
以下は、列挙型の定義と使用例です。
using System;
public enum 曜日
{
月曜日,
火曜日,
水曜日,
木曜日,
金曜日,
土曜日,
日曜日
}
public class プログラム
{
public static void メイン()
{
// 列挙型の使用例
曜日 今日 = 曜日.水曜日;
Console.WriteLine($"今日は {今日} です");
if (今日 == 曜日.水曜日)
{
Console.WriteLine("週の真ん中ですね!");
}
}
}
実行結果
今日は 水曜日 です
週の真ん中ですね!
列挙型の主な疑問や問題点を挙げてみます。
- 列挙型へのアクセス方法は?
- 列挙型のデフォルト値は何か?
- 列挙型と整数型の間でどのように変換するのか?
- 列挙型の値から名前を取得する方法は?
- 列挙型の基になる型を変更する方法は?
- 列挙型の使いどころは?
この記事ではこれらについても詳しく解説します。
列挙型の基本概念
列挙体(Enum)は、特定の数値に名前を付けたものの集合体です。
列挙体を使用すると、特定の値(定数)のセットを簡潔に定義し、それぞれの値に意味のある名前を付けることができます。
列挙型の定義方法
以下の例では、Status という名前の列挙型が定義されています。
列挙型内の各要素は、デフォルトで0から始まります。
つまり、Active は0、Inactive は1、Pending は2に割り当てられます。
enum Status : int
{
Active = 0, // 0
Inactive = 1, // 1
Pending = 2 // 2
}
コードの解説
- 列挙型の定義:
Status
という名前の列挙型をint
型で定義。 - 列挙値の割り当て:
Active
,Inactive
,Pending
という名前の定数にそれぞれ整数値0
,1
,2
を割り当てる。 - 使用方法: コード内でこれらの名前付き定数を使って状態を表現し、比較や条件分岐に利用する。
以下のように列挙体のデータ型と列挙子の値を省略して記述することができます。
enum Status
{
Active, // 0
Inactive, // 1
Pending // 2
}
以下のようにActive に1、Inactive に2、Pending に3のように任意の値を割り当てることもできます。
enum Status
{
Active = 1,
Inactive = 2,
Pending = 3
}
列挙型の値へのアクセス方法
C#の列挙型(enum)の値へのアクセス方法について、コード例を交えて説明します。
まず、基本的な列挙型を定義します。
using System;
public enum Colors
{
Red,
Green,
Blue
}
public class Program
{
public static void Main()
{
//ここに以下の処理を記述する
}
}
以下はアクセス方法です。
列挙型の値から名前を取得する
Enum.GetName(typeof(Colors), value)
メソッドを使用して、整数値 1
から列挙型 Colors
の名前を取得します。
int value = 1; // 取得したい整数値
// 列挙型の値から名前を取得
string colorName = Enum.GetName(typeof(Colors), value);
Console.WriteLine(colorName);
// 出力: Red
列挙型の名前から値を取得する
Enum.TryParse
メソッドを使用して、文字列 name
を列挙型 Colors
の値に変換します。
このメソッドは変換が成功した場合に true
を返し、失敗した場合は false
を返します。
string name = "Green"; // 取得したい名前
// 名前から列挙型の値を取得
if (Enum.TryParse(name, out Colors color))
{
int value = (int)color;
Console.WriteLine(value);
}
else
{
Console.WriteLine("無効な名前です");
}
// 出力: 2
列挙型のすべての値を取得する
Enum.GetValues(typeof(Colors))
メソッドで、Colors
列挙型のすべての値を取得します。
これにより Red
, Green
, Blue
の列挙型の値を含む配列が得られます。
// 列挙型のすべての値を取得
Array values = Enum.GetValues(typeof(Colors));
foreach (Colors color in values)
{
// 数値だけ出力
Console.WriteLine((int)color);
}
// 出力:
// 0
// 1
// 2
列挙型のすべての名前を取得する
Enum.GetNames(typeof(Colors))
メソッドを使用して、Colors
列挙型のすべての名前を取得します。
このメソッドは列挙型の名前の配列(string[]
)を返します。
// 列挙型のすべての名前を取得
string[] names = Enum.GetNames(typeof(Colors));
foreach (string name in names)
{
// 名前を出力
Console.WriteLine(name);
}
//出力:
//Red
//Green
//Blue
列挙型のデフォルト値は何か?
C#の列挙型のデフォルト値は、その列挙型で定義された最初のメンバーです。
列挙型のメンバーは整数値で表され、最初のメンバーは0から始まります(明示的に別の値を設定しない限り)。
enum Color
{
Red, // 0
Green, // 1
Blue // 2
}
class Program
{
static void Main()
{
// デフォルト値はRed(最初のメンバー)
Color defaultColor = default(Color);
Console.WriteLine(defaultColor); // 出力: Red
}
}
列挙型(enum)と整数型の間で変換する方法
列挙型 → 整数に変換する方法
列挙型の値を整数に変換するには、キャストを使用します。
enum Color
{
Red, // 0
Green, // 1
Blue // 2
}
class Program
{
static void Main()
{
Color color = Color.Green;
// 列挙型を整数にキャスト
int colorValue = (int)color;
Console.WriteLine(colorValue); // 出力: 1
}
}
整数 → 列挙型に変換する方法
整数値を列挙型の値に変換するには、キャストを使用します。
enum Color
{
Red, // 0
Green, // 1
Blue // 2
}
class Program
{
static void Main()
{
int colorValue = 2;
// 整数を列挙型にキャスト
Color color = (Color)colorValue;
Console.WriteLine(color); // 出力: Blue
}
}
列挙型の値から名前を取得する方法
列挙型の値から名前を取得する方法で、具体的に 0
から Red
を取得したい場合、Enum.GetName
メソッドが役立ちます。
以下のコードはその方法を示しています。
using System;
public enum Colors
{
Red,
Green,
Blue
}
public class Program
{
public static void Main()
{
int value = 0; // 取得したい値
// 列挙型の値から名前を取得
string colorName = Enum.GetName(typeof(Colors), value);
Console.WriteLine(colorName); // 出力: Red
}
}
列挙型の基になる型を変更する方法
デフォルトでは、列挙型の基になる型は int
ですが、他の整数型(byte
, sbyte
, short
, ushort
, uint
, long
, ulong
)に変更することが可能です。
列挙型の基になる型を指定する方法
列挙型の定義の際に、コロン :
を使って基になる型を指定します。
// 基になる型をbyteに変更
enum Color : byte
{
Red, // 0
Green, // 1
Blue // 2
}
// 基になる型をshortに変更
enum Status : short
{
Pending, // 0
Approved, // 1
Rejected // 2
}
列挙型(enum)の使いどころ
列挙型(enum)は、プログラム内で一連の定数を定義するための便利な方法です。
以下は、列挙型が使われる一般的な場面です。