2012-04-10 3 views
3

Возможно, что value__ может быть здесь?Что такое значение__, определенное в Enum в C#

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(); 
    } 
    } 
} 
+0

Возможный дубликат [Что является целью публичного поля «значение__», которое я можно увидеть в Reflector против моего перечисления?] (http://stackoverflow.com/questions/5214031/what-is-the-purpose-of-the-public-value-field-that-i-can-see-in- отражатель-AG) –

ответ

5

Вы можете найти более here. У плаката даже есть образец кода, который должен помочь вам решить проблему ... просто вставьте BindingFlags.Public | BindingFlags.Static между скобками GetFields().

Используя рефлексию, я решил, что получу верх и возьму под контроль мои проблемы с перечислением. К сожалению, вызов GetFields для типа enum добавляет дополнительную запись с именем value__ в возвращаемый список. После просмотра декомпиляции Enum я обнаружил, что value__ - это просто специальное поле экземпляра, используемое enum для хранения значения выбранного элемента. Я также заметил, что фактические члены перечисления действительно обозначены как статические. Таким образом, чтобы обойти эту проблему, все, что вам нужно сделать, это вызвать GetFields с BindingFlags, установленным только для получения общедоступных статических полей