Перечисления, перекрывающиеся значения, C # - PullRequest
7 голосов
/ 07 октября 2011

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

Просто был сюрприз, мы с коллегой добавили одинаковое значение для перечисления,и он скомпилирован, например

  enum MyEnum
  {
    mine = 1,
    his = 1
  }

Похоже, что C / C ++ также поддерживает это (?).Есть ли причины для такого поведения, в каких случаях это полезно?Я видел один случай с разными человеческими языками (один = 1, eins = 1 и т. Д.), Но я не уверен,

Спасибо

Ответы [ 2 ]

9 голосов
/ 07 октября 2011

Давайте рассмотрим простой пример

enum PrivilegeLevel
{
    None,
    Reporter,
    Reviewer,
    Admin,
    DefaultForNewUser = None,
    DefaultForProjectOwner = Reviewer,
};
0 голосов
/ 07 октября 2011

Идея перечисляемых типов заключается в создании новых типов данных, которые могут принимать только ограниченный диапазон значений.

То, что вы сделали, является законным, и компилятор не должен давать никаких ошибок, так как enum представляет просто константу. Вы просто даете своей константе логическое имя.

Вы можете присвоить одинаковые значения двум или более константам перечисления, когда вам нужно разделить именованные константы. Скажем, у вас есть цветовая схема, в которой используется один и тот же основной цвет, но схемы должны быть логически разделены. Затем вы можете использовать те же значения для констант перечисления. Но все же есть лучшие способы сделать это.

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