C#で`int` を`enum` にキャストする方法


C#でintenum にキャストするには、明示的に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

Avatar
Arunkumar Gudelli

I am One among a million Software engineers of India. I write beautiful markup.I make the Web useful.

次へ
前へ