C# 文字列を列挙型に変換

Minahil Noor 2023年10月12日
  1. C# の string から enum への変換-Enum.Parse() および Enum.TryParse() メソッドの使用
  2. Enum.Parse() メソッドを使用した例外処理で stringenum に変換する C# プログラム
  3. Enum.TryParse() を使用して stringenum に変換する C# プログラム
  4. Enum.IsDefined() メソッドを使用して文字列値の存在を確認する C# プログラム
  5. まとめ
C# 文字列を列挙型に変換

C# では、Enum.Parse() メソッドと Enum.TryParse() メソッドを使用して、文字列を列挙型に変換します。ここでは両方の例を示しましたが、文字列を列挙型に変換するときは Enum.TryParse() メソッドを使用することをお勧めします。

C# の string から enum への変換-Enum.Parse() および Enum.TryParse() メソッドの使用

文字列を列挙型 enum に変換するために、Enum.Parse() メソッドを使用できます。Enum.Parse() は静的メソッドであるため、ファイルの先頭に System を慎重に含める必要があります。

列挙型、文字列値、およびインジケーター(オプション)は、このメソッドのパラメーターです。Enum.Parse()Enum.TryParse() を使用するための正しい構文は次のとおりです。

EnumName VariableName = (EnumName)Enum.Parse(typeof(EnumName), StringValue);
EnumName VariableName = (EnumName)Enum.Parse(typeof(EnumName), StringValue,
                                             indicator);  // indicator can be true or false
// To implement Enum.TryParse()
EnumName VariableName;
Enum.TryParse(StringValue, out VariableName);

これを C# プログラムに実装します。

Enum.Parse() を使用して stringenum に変換する C# プログラム

using System;
class Conversion {
  enum Flowers { None, Daisy = 1, Lili = 2, Rose = 3 }
  static void Main() {
    string stringvalue = "Rose";
    Flowers Flower = (Flowers)Enum.Parse(typeof(Flowers), stringvalue);
    // To check if we have converted successfully
    if (Flower == Flowers.Rose) {
      Console.WriteLine("The Flower is Rose");
    }
  }
}

出力:

The Flower is Rose

ここには、それぞれの値を持つ複数の定数を含む Flowers という名前の列挙型があります。Enum.Parse() メソッドを呼び出して、文字列値 Rose を列挙型に変換しました。typeof(Flowers) は列挙型を返します。最後に、変換が成功したかどうかを確認しました。

変換しようとしている文字列が列挙型で利用できない場合、例外が発生することがあります。これを回避するには、try-catch ブロックを使用します。

Enum.Parse() メソッドを使用した例外処理で stringenum に変換する C# プログラム

using System;

class Conversion {
  enum Flowers { None, Daisy = 1, Lili = 2, Rose = 3 }
  static void Main() {
    stringvalue = "Jasmine";
    try {
      Flowers Flower = (Flowers)Enum.Parse(typeof(Flowers), stringvalue);
    } catch (Exception ex) {
      Console.WriteLine("Not Possible");
      // Set value to none
      Flower = Flowers.none;
    }
  }
}

出力:

Not Possible

Enum.TryParse() を使用して stringenum に変換する C# プログラム

using System;
enum Flowers { None, Daisy = 1, Lili = 2, Rose = 3 }
class Conversion {
  static void Main() {
    string stringvalue = "Rose";
    // Using Enum.TryParse()
    Flowers Flower;
    if (Enum.TryParse(stringvalue, out Flower)) {
      Console.WriteLine(Flower == Flowers.Rose);
    }
  }
}

出力:

True

enum の定数の値を Enum.TryParse() メソッドのパラメーターとして渡すこともできます。次のプログラムはこれを実装します:

using System;

enum Flowers { None, Daisy = 1, Lili = 2, Rose = 3 }
class Conversion {
  static void Main() {
    Flowers Flower;

    if (Enum.TryParse("3", out Flower)) {
      Console.WriteLine(Flower);
    }
  }
}

出力:

Rose

また、変換したい文字列値が列挙型で定義されているか、Enum.IsDefined() メソッドを使用していないかを確認することもできます。

Enum.IsDefined() メソッドを使用して文字列値の存在を確認する C# プログラム

using System;

enum Flowers { None, Daisy = 1, Lili = 2, Rose = 3 }

class Conversion {
  static void Main() {
    Console.WriteLine(Enum.IsDefined(typeof(Flowers), "Rose"));
  }
}

出力:

True

まとめ

Enum.Parse()Enum.TryParse() は、文字列を列挙型に変換するために使用されるメソッドです。ただし、Enum.TryParse() を使用することをお勧めします。

関連記事 - Csharp String

関連記事 - Csharp Enum