Как обобщенно отформатировать логическое значение для строки Да / Нет? - PullRequest
43 голосов
/ 12 апреля 2011

Я хотел бы отобразить Да / Нет на разных языках в соответствии с некоторой логической переменной.
Существует ли общий способ форматирования в соответствии с переданной ему локалью?
Если нет, то чтостандартный способ форматирования логического значения, кроме boolVar ? Resources.Yes : Resources.No.
Я предполагаю, что задействован boolVar.ToString(IFormatProvider).
Верно ли мое предположение?

Ответы [ 3 ]

59 голосов
/ 12 апреля 2011

Фреймворк сам по себе этого не обеспечивает (насколько я знаю). Перевод true/false в yes/no не кажется мне более распространенным, чем другие потенциальные переводы (такие как on/off, checked/unchecked, read-only/read-write или любой другой).

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

public static class BooleanExtensions
{
    public static string ToYesNoString(this bool value)
    {
        return value ? Resources.Yes : Resources.No;
    }
}

Использование:

bool someValue = GetSomeValue();
Console.WriteLine(someValue.ToYesNoString());
43 голосов
/ 03 мая 2012

Как показывают другие ответы, платформа не позволяет логическим значениям иметь собственные средства форматирования.Тем не менее, он позволяет номерам иметь собственные форматы.Метод GetHashCode в логическом значении вернет 1 для true и 0 для false.

В соответствии с MSDN Строки произвольного числового формата , когда есть 3 раздела «;»указанный формат будет применен к «положительным числам; отрицательным числам; нулю».

Метод GetHashCode может быть вызван для значения bool для возврата числа, поэтому вы можете использовать строку произвольного числового формата для возврата Да / Нет, или Вкл / Выкл, или любого другого набора слов, к которым призывает ситуация.

Вот пример, который возвращается вкл / выкл:

var truth   = string.Format("{0:on;0;OFF}", true.GetHashCode());
var unTruth = string.Format("{0:on;0;OFF}", false.GetHashCode());

возвращает:

truth   = on
unTruth = OFF
11 голосов
/ 12 апреля 2011

К сожалению, Boolean.ToString (IFormatProvider) здесь не помогает:

Параметр provider зарезервирован.Он не участвует в выполнении этого метода.Это означает, что метод Boolean.ToString (IFormatProvider), в отличие от большинства методов с параметром provider , не отражает специфичные для культуры параметры.

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

...