none
Typeオブジェクトで渡される列挙型のサイズを知りたい RRS feed

  • 質問

  • .NETの列挙型は、基礎となる数値型を指定できるので、メモリ上のサイズが分かりません。

    enum Enum : short{}

    sizeof(Enum)演算子を使えば分かりますが、ダイナミックに指定されるTypeオブジェクトの型には使えません。

    Type type = typeof(Enum);

    アンマネージへマーシャリングできれば、Marshal.SizeOf(typeof(Enum))が使えそうですが、「アンマネージ構造体としてマーシャリングできません」と言われて例外が飛びます。

    なんとか、Typeオブジェクトで渡された列挙型のサイズを知る方法はありませんでしょうか?

    よろしくお願いします。

    2009年2月27日 9:37

回答

すべての返信

  • Marshal.SizeOf( Enum.GetUnderlyingType( typeof( Enum ) ) )かなー。
    Enum.GetUnderlyingType()は元になる数値型(この例ではshort)を返します。
    • 回答としてマーク qwa03304 2009年3月2日 2:55
    2009年2月27日 10:42
  • 回答ではありません。

    qwa03304 さん の発言:

    なんとか、Typeオブジェクトで渡された列挙型のサイズを知る方法はありませんでしょうか?

    よろしくお願いします。

    逆に、何でそのサイズを知りたいのかが気になります。
    どういった処理を予定されているのでしょうか?
    (通常は気にする必要がないため)


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年2月28日 7:35
    モデレータ
  • Enumクラスに、このようなメソッドがあるとは知りませんでした。
    ありがとうございました。

    配列クラスの機能が、Arrayクラスにもあったことを思い出しました。以後気をつけます。

    2009年3月2日 2:54
  • おっしゃるとおり、通常の作業では知らなくてもよいと思います。

    任意の変数をツリーコントロールに追加すると、内部変数をツリー状に表示するものを作っています。
    定義したマネージ構造体が、対応するアンマネージ構造体と同じサイズになっているかチェックしたかったためです。

    列挙子だけが分からなくて、困っていました。


    2009年3月2日 3:00