1. ホーム
  2. c#

[解決済み] System.Enumから整数に変換するには?

2022-12-06 08:11:07

質問

任意の System.Enum 派生型を対応する整数値に変換する汎用メソッドを、キャストせずに、できれば文字列をパースせずに作成したいと思います。

例えば、私が欲しいものは次のようなものです。

// Trivial example, not actually what I'm doing.
class Converter
{
    int ToInteger(System.Enum anEnum)
    {
        (int)anEnum;
    }
}

しかし、これはうまくいかないようです。Resharperは 'System.Enum' 型の式を 'int' 型にキャストできないことを報告しています。

今、私はこの解決策を思いつきましたが、むしろより効率的なものが欲しいのです。

class Converter
{
    int ToInteger(System.Enum anEnum)
    {
        return int.Parse(anEnum.ToString("d"));
    }
}

何か提案はありますか?

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

キャストしたくない場合。

Convert.ToInt32()

は、そのトリックを行うことができます。

ダイレクトキャスト(via (int)enumValue を介して) は不可能です。列挙型は異なる基本型を持つことができるので、これもまた "危険" であることに注意してください ( int , long , byte ...).

より正式には System.Enum とは直接の継承関係はありません。 Int32 (との直接的な継承関係はありません(ただし、どちらも ValueType であるにもかかわらず)、したがって、明示的なキャストは型システムの中で正しいとは言えません。