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

Фон

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

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

enum YesNo
{
     Yes,
     No
}

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

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

Мой вопрос

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

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

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

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

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

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

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

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

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

Ответы [ 17 ]

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

Я прочитал ваше обновленное объяснение, но все еще чувствую, что это плохой выбор. Логические значения существуют именно для этой цели. ваша ответственность за то, чтобы при выводе «они увидят, что это напечатано в другом контенте» соответствующий текст выводится. Это может быть так просто, как:

Console.WriteLine (_ ("Using Foo:") + (useFoo? _ ("Yes"): _ ("No")));

при полной поддержке локализации. useFoo - это, конечно, параметр, сообщающий функции, использует ли она foo. :)

_ - это сокращение от функции gettext (http://www.gnu.org/software/gettext/),, которое доступно для C # (http://www.gnu.org/software/automake/manual/gettext/C_0023.html).

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

(Юмор - пожалуйста не воспринимайте это всерьез ...)

Я удивлен, что никто еще не предложил это:

public enum UserWtf
{
    No,
    Yes,
    FileNotFound
}
1 голос
/ 22 декабря 2008

EUserAction?

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

Однако, для вашего другого, тонкого вопроса:

потому что они увидят это напечатанным в других контекстах, и я бы хотел, чтобы это было более очевидно, какой был выбор.

не должно иметь значения, что видит пользователь. Модель данных может сильно отличаться от того, что вы представляете пользователю. Бул бы хватило. Есть ли возможность для дополнительных действий в будущем?

1 голос
/ 01 февраля 2012

Когда мне нужно что-то подобное, я использую слово Флаг, как в Flag.Yes, MarriedFlag.No и т. Д.

Пример, когда это полезно: вы знаете, что сегодня есть только значения Да и Нет, но вы подозреваете, что в будущем могут появиться дополнительные значения (например, Возможно).

0 голосов
/ 23 ноября 2017

Я использую OptionalBinaryFilter для:

Да, нет, все

Но если у вас есть только «Да» и «Нет», похоже, более подходящее использование логического выражения в члене.

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

Используйте bool в сочетании с bool.TrueString и bool.FalseString для отображения.

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

Я не вижу смысла этого перечисления, если не было каких-то других значений, кроме Да и Нет. Это просто глупость. И делать перечисление просто так, чтобы вам не приходилось печатать «да» или «нет», кажется глупым.

...