C#で`int` を`enum` にキャストする方法
C#でint
をenum
にキャストするには、明示的にenum
変数を integer にタイプキャストしてください。
SampleEnum sample = (SampleEnum)IntVariable;
目次
解決策1:enum
変数の明示的な型変換を利用する
例題でさらに理解を深めましょう。
Days
というenum
型があり、これは月曜日から始まる曜日を表しています。
public enum Days
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
int dayInteger = 6;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//Monday
しかし、上記の int
からenum
への変換 には問題があります。
もし、int
の値が C# のEnum
変数に存在しない場合はどうなるのでしょうか?
int dayInteger = 100;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//100
例外はスローされません。
ですから、int
の値を整数にキャストする前に、Enum
に存在するかどうかをチェックする方がよいでしょう。
変数enum
に整数が存在するかどうかをチェックする
C#Enum
のすべての整数値を取得するには、Enum.GetValues
メソッドを使用します。
それらを C# のリストに変換し、list.Contains()
メソッドで与えられた整数がenum
変数に存在するかどうかをチェックできるようにします。
var intValue = 100;
var enumValues = Enum.GetValues(typeof(Days)).Cast<int>().ToList();
if(enumValues.Contains(intValue)){
Console.WriteLine("We can Cast int to Enum");
Days day = (Days) intValue;
}else{
Console.WriteLine("Cannot Cast int to Enum");
}
Enum.IsDefined()
メソッドで、変換された整数値が与えられたenum
型に存在するかどうかをチェックすることができます。
var enumValue = (Days)1;
if (Enum.IsDefined(typeof(Days), enumValue)){
Console.WriteLine("The converted int to enum value is",enumValue);
}else{
Console.WriteLine("Cannot Convert int to Enum",enumValue);
}
解決策2:Enum.ToObject()
メソッドを使う
C#でint
の値をenum
に変換するEnum.ToObject()
メソッドを使用することができます。
var enumValue = Enum.ToObject(typeof(Days),1);
Console.WriteLine(enumValue);
//Tuesday
Console.WriteLine(enumValue.GetType());
//Days