3

キャストを使用してintをenumに変換できることを知っています

MyEnumType myEnum = (MyEnumType) myInteger;

ここでの問題は、 myInteger がタイプでない場合、ビルド時にランタイムキャストが私を止めないことですint

void MyMethod(MyObject myObject)
{
    MyEnumType myEnum = (MyEnumType) myObject.someProperty;
    ....
}

上記は珍しいコード パターンではありませんが、オブジェクトのプロパティ タイプが変更されている場合、ビルド時に保護されません。

ビルド時にエラーが発生するこの変換を行うための組み込みメソッドはありますか? もちろん、ジェネリック メソッドをかなり簡単に作成することもできますが、組み込みのメソッドがあるかどうか疑問に思っています。

4

2 に答える 2

2

1 つの列挙型に対してこれを行うメソッドを簡単に作成できます。

public static MyEnumType CastFromInt<T>(int n)
{
    return (MyEnumType)n;
}

残念ながら、ジェネリック型引数が列挙型になるようにジェネリック制約を適用する方法がないため、これをジェネリック化する良い方法はありません。次のように書くことができます。

public static T CastFromInt<T>(int n)
{
    return (T)(object)n;
}

ただし、呼び出し元が の型として列挙型を使用することを前提としていTます。そうでない場合は、問題があります。これはまた、整数を不必要にボックス化します。

于 2013-11-13T17:57:00.353 に答える
2

You can use

Enum.TryParse(myInteger.ToString(), out result)

to get the Enum value of an int.

Hope this helps,

于 2013-11-13T17:57:45.820 に答える