10

ここには何value__があるのでしょうか?

value__
MSN
ICQ
YahooChat
GoogleTalk

私が実行したコードは単純です:

namespace EnumReflection
{
    enum Messengers
    {
      MSN,
      ICQ,
      YahooChat,
      GoogleTalk
    }

  class Program
  {
    static void Main(string[] args)
    {
      FieldInfo[] fields = typeof(Messengers).GetFields();

      foreach (var field in fields)
      {
        Console.WriteLine(field.Name);
      }

      Console.ReadLine();
    }
  }
}
4

1 に答える 1

11

あなたはここでもっと見つけることができます。ポスターには、問題を回避するためのサンプルコードも含まれています... BindingFlags.Public|を挿入するだけです。GetFields()の括弧の間にあるBindingFlags.Static 。

リフレクションを使用することで、私は優位に立ち、列挙型の問題を制御できると考えました。残念ながら、列挙型でGetFieldsを呼び出すと、返されたリストにvalue__という名前の追加のエントリが追加されます。列挙型の逆コンパイルを参照した後、value__は、選択されたメンバーの値を保持するために列挙型によって使用される単なる特別なインスタンスフィールドであることがわかりました。また、実際の列挙型メンバーが実際に静的としてマークされていることにも気づきました。したがって、この問題を回避するには、BindingFlagsを設定してGetFieldsを呼び出し、パブリックの静的フィールドのみを取得するだけです。

于 2012-04-10T00:47:22.920 に答える