Подтвердить что ты не робот

Как в целом форматировать логическое значение в строку Yes/No?

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

4b9b3361

Ответ 1

Сама структура не предоставляет этого для вас (насколько я знаю). Перевод 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());

Ответ 2

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

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

Метод GetHashCode может быть вызван в значение bool для возврата числа, чтобы вы могли использовать строку Custom Numeric Format String, чтобы вернуть Yes/No или On/Off или любой другой набор слов, которые требует ситуация.

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

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

возвращает:

truth   = on
unTruth = OFF

Ответ 3

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

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

В любом случае логические переменные представляют True и False, а не Yes и No. Если вы хотите сопоставить True → Yes и False → No, вам нужно будет сделать это (включая локализацию) самостоятельно; в этом нет встроенной поддержки. Ваше рекомендуемое решение (Resources.Yes/No) выглядит хорошо для меня.