C#で同じ値の異なるEnumへの変換を行う

C# である Enum から別の Enum の同じ値のメンバーへ変換を行う方法を説明します。

問題の確認

例えば、以下の2つの Enum が定義してあったときに、双方の “A” というメンバーは同じ値となっています。そこで

public enum EnumSample_1
{
    A = 0,
    B,
    C,
}

public enum EnumSample_2
{
    A = 0,
    B,
    C,
}

変換方法

itemで指定した型を T で指定した型へ変換します。

public static T EnumConvert<T>(object item)
{
    return (T)Enum.ToObject(typeof(T), (int)item);
}

使い方

使い方ですが以下の通りです。T には変換後の型名を、引数に変換したい enum値を指定します。

public static void Main(string[] args)
{
    EnumSample_1 result = EnumConvert<EnumSample_1>(EnumSample_2.C);
    Console.WriteLine(result.ToString());
    // A (=EnumSample_1)
}

ちなみにこれ、変換後に整数で存在しないメンバーを指定しても処理が正常に終わるので値の範囲が全然違う場合はご注意ください。