Что делает Enum.GetUnderlyingType (Type)? - PullRequest
4 голосов
/ 04 января 2011

Я не понимаю цели Enum.GetUnderlyingType(Type enumType)

Документация MSDN тоже не помогает:

Возвращает базовый тип указанного перечисления.

Кажется, что это преобразует указанный тип enum в ... что-то еще. о_О

Что IS базовый тип? Это похоже на некоторые внутренние детали реализации. Почему эта публика? Зачем мне заботиться о реализации? Просмотр фактической реализации тоже не помогает, метод просто делает некоторые проверки, затем вызывает

[MethodImplAttribute(MethodImplOptions.InternalCall)] 
private static extern Type InternalGetUnderlyingType(Type enumType);

... я не могу найти источник.

Кто-нибудь может пролить свет на это?

Ответы [ 4 ]

7 голосов
/ 04 января 2011

Обратите внимание, что вы можете указать базовый тип перечисления через

enum Foo : long { One, Two };

И тогда GetUnderlyingType вернет long для typeof(Foo).

Обратите внимание, чтобазовый тип может быть любым целым типом, кроме char типов.

5 голосов
/ 04 января 2011

Перечисления хранятся в памяти в виде чисел.По умолчанию int32.Это основной тип.Вы можете изменить это:

public enum z : byte {
  x = 257 // invalid
}
2 голосов
/ 04 января 2011

за MSDN :

Каждый тип перечисления имеет базовый тип, который может быть любым целым тип кроме символа Базовый тип элементов перечисления по умолчанию - int.

, например

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

Ваш базовый тип - int

enum Range :long {Max = 2147483648L, Min = 255L};

А теперь это долго.

1 голос
/ 04 января 2011

Вот ссылка на статью, которая дает некоторые пояснения о том, что она делает и когда ее использовать.http://dotnetperls.com/enum-getunderlyingtype

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...