2 ways to convert/cast int toenum in C#

int を変換またはキャストするには、2つの方法があります。 enumC# で

1.C#の明示的な型変換を使用する。 2.Enum.ToObject() メソッドを使用する

On this page

解決策1:C#の明示的な型キャスティングを利用する

C#でintenumに変換する簡単な方法は、明示的な型キャスティングを使用することです。

例を見て、さらに理解を深めましょう。

私たちは、 という型を持っています。 enum``LogLevelという型があり、これはロギングの異なるレベルを表します。

public enum LogLevel
{
   ERROR=1, 
   WARN=2, 
   INFO=3, 
   DEBUG=4
}

int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR

明示的なキャスティングを行うには enumの型を括弧で囲んで,int の値の前に置くことによって行われます。

しかし、上記の C#int への変換には問題があります。 enum変換に問題があります。

もし、int の値が C#Enum の変数に存在しない場合はどうなるのでしょうか?

int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100

例外はスローされません。

ですから、int の値を整数にキャストする前に、C# Enum に存在するかどうかをチェックする方がよいでしょう。

に整数が存在するかどうかをチェックする。 C# enum変数

C# Enum にあるすべての整数値を取得するには、Enum.GetValues メソッドを使用します。

それらをC# のリストに変換し、list.Contains() メソッドで与えられた整数が変数に存在するかどうかをチェックします。 enum変数に存在するかどうかを調べることができます。

var intValue = 100;
var enumValues = Enum.GetValues(typeof(LogLevel)).Cast<int>().ToList();

if(enumValues.Contains(intValue)){
   Console.WriteLine("We can Cast C# int to Enum");  
   LogLevel loggingValue = (LogLevel) intValue;
}else{
  Console.WriteLine("Cannot Cast C# int to Enum");
}

Enum.IsDefined() メソッドを使って,変換された整数値が与えられた型に存在するかどうかをチェックすることができます。 enum型に存在するかどうかを調べることができます。

var enumValue = (LogLevel)1;

if (Enum.IsDefined(typeof(LogLevel), enumValue)){
   Console.WriteLine("The converted int to enum value is",enumValue);
}else{
   Console.WriteLine("Cannot Convert int to Enum",enumValue);
}

解決策2:Enum.ToObject() メソッドを使用する

C# Enum.ToObject() メソッドを使用し、int の値を enumに変換することができます。

var enumValue = Enum.ToObject(typeof(LogLevel),1);

Console.WriteLine(enumValue);

//ERROR

Console.WriteLine(enumValue.GetType());
//LogLevel