типы перечислений в C # - PullRequest
5 голосов
/ 08 июня 2011

Я прочитал это утверждение в книге C #.

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

Если я понимаю это утверждение, это означаетодно из этого является приемлемым (я не знаю, какой):

1.

enum EmpType
{
    Manager = 1,
    Grunt = 1,
    Contractor = 100,
    VicePresident = 9
}

2.

enum EmpType
{
    Manager = 10,
    Manager = 1,
    Contractor = 100,
    VicePresident = 9
}

Может кто-нибудь объяснить мне?Я думал, что C # должен был быть подмножеством C / C ++.

Ответы [ 5 ]

4 голосов
/ 08 июня 2011

Первый будет действительным, возможно, у вас есть дубликат Values, а не дубликат Names

3 голосов
/ 08 июня 2011

На самом деле - почему бы не проверить :) Каждое перечисление является подклассом класса System.Enum (специально обработано), каждый элемент перечисления является статическим полем, инициализированным литеральным значением - вы не можете иметь два поля с одинаковыми именами, но можете имеют поля с одинаковыми значениями, поэтому # 1 будет работать, # 2 не будет.

3 голосов
/ 08 июня 2011

1 правильно, 2 - нет.

Как сказано в книге, перечисления не обязательно должны иметь уникальные значения (пример 2 показывает перечисления с неуникальными именами).Имена должны быть уникальными, так как компилятор сопоставляет их со значением.

1 голос
/ 08 июня 2011

Номер 1 приемлем.Номер 2 создает исключение времени компиляции.Вы можете иметь несколько эквивалентных значений.Но не эквивалентные дубликаты имен.

Например, предположим, что вы хотите определить перечисление для уровней работы персонала компании.У вас есть персонал, руководство.в его состав входят отдел продаж и отдел информационных технологий, и для вас не имеет значения, занят ли человек продажами или отделом информационных технологий, в любом случае он считается сотрудником.Вы можете определить следующее перечисление:

public enum PersonnelLevels
{   
    Management=0,
    Sales=1,
    IT=1
}  
0 голосов
/ 08 июня 2011

Ссылаясь на enum (C # Reference) :

Базовый тип по умолчанию элементы перечисления int.

Вы можете присвоить любое целочисленное значение любому элементу перечисления. Вы можете назначить дублированные значения для разных элементов. Однако имена элементов должны быть уникальными.

Это означает, что первый блок правильный. Но второго блока нет.

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