Почему Boolean.ToString выводит "True", а не "true",
true.ToString()
false.toString();
Output:
True
False
Есть ли веская причина для того, чтобы он был "Истинным", а не "истинным"? Он ломается при написании XML, поскольку логический тип XML является строчным, а также несовместим с С# true/false (не уверен в CLS, хотя).
Обновление
Вот мой очень хакерский способ обойти его на С# (для использования с XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
Конечно, это добавляет еще один метод в стек, но везде удаляет ToLowers().
Ответы
Ответ 1
Только люди из Microsoft могут действительно ответить на этот вопрос. Тем не менее, я хотел бы предложить некоторые интересные факты об этом;)
Во-первых, это то, что он говорит в MSDN о методе Boolean.ToString():
Возвращаемое значение
Тип: System.String
TrueString, если значение этого экземпляр true, или FalseString if значение этого экземпляра ложно.
Примечания
Этот метод возвращает константы "True" или "False". Обратите внимание, что XML чувствителен к регистру, и Спецификация XML распознает "истинный" и "false" как действительный набор Булевы значения. Если объект String возвращенный методом ToString() должен быть записан в файл XML, его Метод String.ToLower должен быть сначала преобразовать его в в нижнем регистре.
Вот забавный факт №1: он вообще не возвращает TrueString или FalseString. Он использует жестко закодированные литералы "True" и "False". Не было бы хорошо, если бы оно использовало поля, потому что они помечены как только для чтения, поэтому их не меняют.
Альтернативный метод Boolean.ToString(IFormatProvider) еще более забавный:
Примечания
Параметр поставщика зарезервирован. Он не участвует в выполнении этого метода. Это означает, что метод Boolean.ToString(IFormatProvider), в отличие от большинства методов с параметром поставщика, не отражает настройки для конкретной культуры.
Какое решение? Зависит от того, что именно вы пытаетесь сделать. Что бы это ни было, я уверен, что это потребует взлома;)
Ответ 2
... потому что среда .NET предназначена для поддержки многих языков.
System.Boolean(в mscorlib.dll) предназначен для внутреннего использования языками для поддержки булевского типа данных. С# использует все строчные буквы для своих ключевых слов, поэтому "bool", "true" и "false".
Однако VB.NET использует стандартный корпус: следовательно, "Boolean", "True" и "False".
Поскольку языки должны работать вместе, вы не можете иметь true.ToString() (С#), давая другой результат True.ToString() (VB.NET). Дизайнеры CLR выбрали стандартную нотацию оболочки CLR для результата ToString().
Строковое представление логического истины определяется как Boolean.TrueString.
(Аналогичный случай с System.String: С# представляет его как тип 'string').
Ответ 3
Для Xml вы можете использовать метод XmlConvert.ToString.
Ответ 4
Это простой код для преобразования этого кода во все строчные буквы.
Не так просто преобразовать "true" обратно в "True", однако.
true.ToString().ToLower()
- это то, что я использую для вывода xml.
Ответ 5
Как это несовместимо с С#? Boolean.Parse и Boolean.TryParse нечувствительны к регистру, и синтаксический анализ выполняется путем сравнения значения с Boolean.TrueString или Boolean.FalseString, которые являются "True" и "False".
EDIT: при взгляде на метод Boolean.ToString в отражателе оказывается, что строки жестко закодированы, поэтому метод ToString выглядит следующим образом:
public override string ToString()
{
if (!this)
{
return "False";
}
return "True";
}
Ответ 6
Я знаю, почему это так, как это уже было рассмотрено, но когда дело доходит до "настраиваемого" логического форматирования, у меня есть два метода расширения, с которыми я не могу больше жить:-)
public static class BoolExtensions
{
public static string ToString(this bool? v, string trueString, string falseString, string nullString="Undefined") {
return v == null ? nullString : v.Value ? trueString : falseString;
}
public static string ToString(this bool v, string trueString, string falseString) {
return ToString(v, trueString, falseString, null);
}
}
Использование тривиально. Следующее преобразует различные значения bool в их португальские представления:
string verdadeiro = true.ToString("verdadeiro", "falso");
string falso = false.ToString("verdadeiro", "falso");
bool? v = null;
string nulo = v.ToString("verdadeiro", "falso", "nulo");
Ответ 7
Причина true
- "Истина" - это сильная связь Microsoft с стандартами XML.
От Wikipedia:
"Расширяемый язык разметки (XML) - это язык разметки, который определяет набор правил для кодирования документов в формате, который как доступен для человека, так и машиночитаемым".
Человекочитаемый субъективен, но в глазах XML предпочтительнее использовать слово "один" вместо числа "1". Вы заметите, что это происходит с использованием перечислений, поскольку слово сериализуется вместо его значения ( "FirstOption" вместо "0" или "1" ).
Аналогично, текст обычно следует CamelCasing. Поэтому вместо "string" XML предпочитает "String". Вот почему Boolean.TrueString является "True" и Boolean.FalseString по умолчанию "False".
Ответ 8
Для людей, работающих с JSon, вы сталкиваетесь с такой же проблемой, используя JSonConvert для десериализации json в объекты. Как и в xml, вы можете использовать JSonConvert.ToString('bool value') для обхода столиц.
Ответ 9
Это, вероятно, связано со старыми днями VB NOT.Net, когда bool.ToString создала True или False.