Я бы хотел показать Да/Нет на разных языках в соответствии с некоторой логической переменной.
Есть ли общий способ отформатировать его в соответствии с локалью, переданной ей?
Если нет, то какой стандартный способ форматировать логическое значение, кроме boolVar ? Resources.Yes : Resources.No
.
Я предполагаю, что участвует boolVar.ToString(IFormatProvider)
.
Правильно ли мое предположение?
Как в целом форматировать логическое значение в строку Yes/No?
Ответ 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) выглядит хорошо для меня.