Какое хорошее название для Enum для значений Yes и No - PullRequest
5 голосов
/ 22 декабря 2008

Фон

В приложении для командной строки C #, которое я пишу, некоторые параметры имеют в качестве возможных значений «да» и «нет».

Я сохраняю их ввод, используя тип Enum, показанный ниже.

enum YesNo
{
     Yes,
     No
}

Что нормально - код работает. Нет проблем там.

ПРИМЕЧАНИЕ: Да, я мог бы хранить их как bool (вот как это раньше работало). Мой выбор дизайна должен быть явным в отношении выбора «да / нет», сделанного пользователем, потому что он увидит это напечатанным в других контекстах, и я бы хотел, чтобы это было более очевидно, что был выбор.

Мой вопрос

  • Просто странно иметь перечисление с именем "YesNo" - каковы некоторые предложения для лучших имен перечисления для значений "да" и "нет".

Итак, наконец

Я задал этот вопрос относительно рано в жизни StackOverflow. Это не был фальшивый вопрос - у меня действительно была такая ситуация. Я просто подумал, что было бы неплохо использовать его, чтобы посмотреть, что сделает сообщество. Потому что это, я допускаю несколько странный вопрос.

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

Комментарии к ответам

переключение на bool . Я понимаю вашу мотивацию, но я чувствую, что должен указать, что выбор двоичный (и под этим я подразумеваю выбор между любыми двумя значениями - живым / мертвым, женатым / неженатым и т. Д.) Не такой же, как логический выбор между истиной и ложью. Мы находим программистов, переключающихся между да / нет и истиной / ложью легко - достаточно справедливо. Если бы я выбрал в этом случае, например, «Демократ» или «Репликация» »(надуманный пример, я знаю), то вы можете увидеть возможности для путаницы или, по крайней мере, неловкости. Я думаю, что опция bool действительна в этом случае, но меньше так в других бинарных вариантах.

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

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

Было много хороших комментариев, спасибо всем!

Ответы [ 17 ]

36 голосов
/ 22 декабря 2008

Вы говорите, что не хотите использовать bool, потому что он будет распечатан для просмотра среди прочего содержимого. Это говорит о том, что проблема не в хранилище , а в дисплей . Обязательно укажите true / false как Да / Нет, но нет необходимости создавать новый тип для него IMO.

РЕДАКТИРОВАТЬ: В дополнение к предложению, что вы вообще не используете enum, я настоятельно рекомендую, если вы do используете enum, вы измените порядок или используете явные значения. Имея Да = 0, Нет = 1 будет очень запутанным, если вы когда-нибудь увидите значения как целые числа.

7 голосов
/ 22 декабря 2008

Я бы посоветовал вам использовать имя, которое указывает значение, которое установлено на Да или Нет.

например.


public enum Married
{
    YES,
    NO
}
7 голосов
/ 22 декабря 2008

Я был бы смущен, увидев, что enum используется для логического значения. Вы говорите, что:

ПРИМЕЧАНИЕ: Да, я мог бы хранить их как bool (вот как это раньше работало). Мой выбор дизайна должен быть явным о выборе Да / Нет, сделанном пользователем, потому что он увидит это
напечатано в другом содержании, и я бы хотел, чтобы выбор был более очевидным.

Я не вижу, как "Да" или "Нет" более "явно", чем истина или ложь.

6 голосов
/ 22 декабря 2008

ResponseEnum или EResponse или UserResponse в зависимости от ваших соглашений.

Я бы не ограничивал себя только Да или Нет, так как в будущем вы можете захотеть добавить функциональность, которая также требует ответа Unsure.

5 голосов
/ 22 декабря 2008

Я бы хотел назвать это:

enum Boolean
{
     Yes,
     No
}

Нет, подождите, уже есть встроенный логический тип, который вы можете использовать.

Если ваша единственная причина для использования перечисления здесь заключается в том, что есть удобное преобразование в / из строки, которую вы хотите показать пользователю, то вы будете очень сильно укушены, если будете делать более сложные вещи , Выделение модели из поля зрения хорошо вам обеспечит. Читайте о шаблонах MVC и / или MVVM.

Я мог бы также предложить, что здесь может быть достаточно простого логического значения с некоторыми пользовательскими атрибутами, определяющими строки отображения, которые будут использоваться вместо «true» и «false». Затем вы можете написать свои собственные в / из строковых методов, которые ищут ваши пользовательские атрибуты.

3 голосов
/ 22 декабря 2008

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

2 голосов
/ 22 декабря 2008

Есть ли возможность иметь параметр, отличный от да / нет?

2 голосов
/ 22 декабря 2008

Я думаю, что Да нет, просто отлично. Рассмотрим такие вещи, как «MB_OK» и «MB_YESNO» ... Я знаю, что это не тип, но все, что говорит само за себя, должно быть хорошо.

2 голосов
/ 22 декабря 2008

Я думаю, что есть проблема с отображением значений bool. Лучше создать простую оболочку, которая хранит логические значения, позволяющие отображать их как Да / Нет или Истина / Ложь.

1 голос
/ 22 декабря 2008
  • YesNo
  • Выбор
  • BinaryChoice

Или просто используйте логическое значение.

...