Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Тип элемента в Enum

273
28 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Пусть есть тип enum:
[FONT=Courier New][COLOR=blue]enum[/COLOR] EnumExample : [COLOR=blue]byte[/COLOR] {One = [COLOR=blue]1[/COLOR], Two = [COLOR=blue]2[/COLOR]}[/FONT]
Как бы так по нормальному узнать в runtime, какого типа его элементы (т.е. One и Two). Такой вариант:
Код:
[SIZE=2][COLOR=#0000ff][FONT=Courier New]private [/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Type[/COLOR][/SIZE][SIZE=2] GetEnumElementType([/SIZE][SIZE=2][COLOR=#008080]Enum[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] value)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff] return[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] GetEnumElementType(value.GetType());[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff]private [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Type[/COLOR][/SIZE][SIZE=2] GetEnumElementType([/SIZE][SIZE=2][COLOR=#008080]Type[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] enumType)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080] FieldInfo[/COLOR][/SIZE][SIZE=2][] fields = enumType.GetFields([/SIZE][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Public |[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].NonPublic |[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].Instance |[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#008080]BindingFlags[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].DeclaredOnly);[/FONT][/SIZE]
[FONT=Courier New][SIZE=2][COLOR=#0000ff] return[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] fields[0].FieldType;[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]

Но что-то он кривой какой-то. Может есть у кого-то иные решения?
303
29 декабря 2006 года
makbeth
1.0K / / 25.11.2004
Используй Enum.GetUnderlayingType.
Код:
class Program
    {
        enum ShortEnum : short
        {
            One = 0,
            Two = 1
        }

        enum ByteEnum : byte
        {
            One = 0,
            Two = 1
        }

        static void Main(string[] args)
        {
            Type t = typeof(ShortEnum);
            Console.WriteLine("Enum {0} has elements of type: {1}", t.Name, Enum.GetUnderlyingType(t));
            t = typeof(ByteEnum);
            Console.WriteLine("Enum {0} has elements of type: {1}", t.Name, Enum.GetUnderlyingType(t));
            Console.ReadKey();
        }
    }

Результат:
 
Код:
Enum ShortEnum has elements of type: System.Int16
Enum ByteEnum has elements of type: System.Byte
273
29 декабря 2006 года
3A3-968M
1.2K / / 22.12.2005
Спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог