1. ホーム
  2. c#

C#のintからenumへの変換 [重複]について

2023-09-21 16:25:59

質問

重複の可能性があります。

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

以下のようなコードがあった場合。

enum foo : int
{
    option1 = 1,
    option2,
    ...
}

private foo convertIntToFoo(int value)
{
    // Convert int to respective Foo value or throw exception
}

変換コードはどのようなものになるのでしょうか?

どのように解決するのですか?

intをFooにキャストすればよいのです。

int i = 1;
Foo f = (Foo)i;

もし、定義されていない値をキャストしようとしても、それはまだ動作します。これによって生じるかもしれない唯一の害は、後でその値をどのように使用するかということです。

もし本当に値が列挙型で定義されていることを確認したいのであれば、Enum.IsDefinedを使用することができます。

int i = 1;
if (Enum.IsDefined(typeof(Foo), i))
{
    Foo f = (Foo)i;
}
else
{
   // Throw exception, etc.
}

しかし、IsDefinedを使用すると、キャスト以上のコストがかかります。どちらを使うかは実装に依存します。ユーザーの入力を制限したり、enumを使用する際にデフォルトのケースを処理することを検討するとよいでしょう。

また、enumがintを継承していることを指定する必要はなく、これがデフォルトの動作であることに注意してください。