C # BaseType перечисления - PullRequest
       1

C # BaseType перечисления

0 голосов
/ 08 ноября 2018

У меня есть enum Color, оно может быть производным от long или byte или int, и я хочу знать, от какого типа оно действительно происходит, long или byte или int ? В процессе я столкнулся с 2 проблемами.

Во-первых, Color определяется следующим образом:

enum Color : long
{
    red = 1,
    black = 2,
    blue = 3
}

Задача 1

Я пишу код ниже, чтобы делать такие вещи:

Console.WriteLine(typeof(Color));    // ConsoleApp7.Color
Console.WriteLine(typeof(Color).BaseType);    // System.Enum

В этот момент я столкнулся с моей первой проблемой: любопытно, что typeof(Color).BaseType - это System.Enum, потому что Color - это enum тип.

Так что мне интересно, определяете ли вы тип enum как enum Enum1 { ... }, это на самом деле означает, что: class Enum1 : enum { ... }?

Задача 2

Исходя из задачи 1, если я хочу получить базовый тип real , мне нужно написать:

Console.WriteLine(typeof(Color).BaseType.BaseType);

Его вывод System.ValueType, мы знаем, что int, byte и long все System.ValueType, как я могу получить ключевое слово long ?

Спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы хотите базовый тип, а не базовый тип:

var underlyingType = Enum.GetUnderlyingType(typeof(ConsoleColor))

Также обратите внимание, что любое специфическое перечисление (например, ваше Color) является типом значения, а базовый тип System.Enum равен System.ValueType (несмотря на то, что System.Enum является ссылочным типом) , Вот почему ваш typeof(Color).BaseType.BaseType равен System.ValueType

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