true.ToString()
false.toString();
Output:
True
False
Есть ли веская причина для того, чтобы это было «Истина», а не «Истина»? Он ломается при написании XML, так как логический тип XML в нижнем регистре , а также не совместим с C / true / false (хотя не уверен насчет CLS).
Обновить
Вот мой очень хакерский способ обойти это в C # (для использования с XML)
internal static string ToXmlString(this bool b)
{
return b.ToString().ToLower();
}
Конечно, это добавляет еще 1 метод в стек, но удаляет ToLowers () везде.
return b.ToString().ToLower();
наreturn b ? "true" : "false";
. Более чистый, более эффективный, менее зависимый от метода, который теоретически может зависеть от локали (даже если в современных реализациях это не так).Ответы:
Только люди из Microsoft могут действительно ответить на этот вопрос. Тем не менее, я хотел бы предложить некоторые забавные факты об этом;)
Во-первых, в MSDN говорится о методе Boolean.ToString () :
Вот забавный факт # 1: он не возвращает TrueString или FalseString вообще. Он использует жестко закодированные литералы «True» и «False». Не принесет пользы, если будут использованы поля, потому что они помечены как доступные только для чтения, поэтому их не нужно менять.
Альтернативный метод Boolean.ToString (IFormatProvider) еще смешнее:
Какое решение? Зависит от того, что именно вы пытаетесь сделать. Что бы это ни было, держу пари, это потребует взлома;)
источник
Boolean.ToString()
.bool.TrueString
это поле только для чтения, которое содержит в буквальном смысле литерал "True" . Следовательно, говорить, что он возвращает,TrueString
- это то же самое, что говорить, что он возвращает жестко закодированный литерал «Истина», хранящийся в нем, учитывая, что возвращение строки всегда возвращает значение, а не ссылку.TrueString
будет изменен, скажем, на строчный «true», методbool.ToString()
все равно вернет паскальный регистр «True».... потому что среда .NET разработана для поддержки многих языков.
System.Boolean (в mscorlib.dll) предназначен для внутреннего использования языками для поддержки логического типа данных. C # использует все строчные буквы для своих ключевых слов, следовательно, «bool», «true» и «false».
VB.NET, однако, использует стандартный регистр: следовательно, «Boolean», «True» и «False».
Поскольку языки должны работать вместе, у вас не может быть true.ToString () (C #), дающего другой результат для True.ToString () (VB.NET). Разработчики CLR выбрали стандартную запись CLR для результата ToString ().
Строковое представление логического true определено как Boolean.TrueString.
(Есть аналогичный случай с System.String: C # представляет его как тип 'string').
источник
ToString()
и они вынуждены использовать какIf(b, "True", "False")
. Так что пользователю c # вроде меня нужно пожертвовать, чтобы использоватьToLower()
:)Для Xml вы можете использовать метод XmlConvert.ToString .
источник
Это простой код для преобразования в нижний регистр.
Однако не так просто преобразовать «истину» в «истину».
это то, что я использую для вывода XML.
источник
ToString()
результата.ToLowerInvariant()
,Как это не совместимо с C #? Boolean.Parse и Boolean.TryParse нечувствительны к регистру, и разбор выполняется путем сравнения значения с Boolean.TrueString или Boolean.FalseString, которые имеют значения «True» и «False».
РЕДАКТИРОВАТЬ: При взгляде на метод Boolean.ToString в отражателе оказывается, что строки жестко закодированы, поэтому метод ToString выглядит следующим образом:
источник
That's probably the only context in C# where the construct "if (!this)" is valid!
Вы бросили мне вызов, вы проиграли . gist.github.com/Steinblock/10df18afb948866be1ba - Также сегодня исполняется 200 лет со дня рождения Джорджа Буляreturn this ? "True" : "False";
? (Еще один необычный случай, который вы не часто рассматриваетеthis
как?:
условие, но здесь это имело бы смысл.)Я знаю причину, по которой он уже решен, но когда дело доходит до «пользовательского» логического форматирования, у меня есть два метода расширения, без которых я больше не могу жить :-)
Использование тривиально. Следующее преобразует различные значения bool в их португальские представления:
источник
Причина в том, что
true
это правда, из-за сильной связи Microsoft со стандартами XML.Из Википедии : «Расширяемый язык разметки (XML) - это язык разметки, который определяет набор правил для кодирования документов в формате, который читается человеком и читается машиной».
Человекочитаемый субъективен, но, с точки зрения XML, использование слова «один» вместо числа «1» является предпочтительным. Вы заметите, что это происходит с использованием перечислений, так как слово сериализуется вместо его значения («FirstOption» вместо «0» или «1»).
Точно так же текст обычно следует за CamelCasing . Поэтому вместо «строка» XML предпочитает «строка». Вот почему Boolean.TrueString имеет значение «True», а Boolean.FalseString по умолчанию «False».
источник
Это, вероятно, исходит из старых VB NOT .Net дней, когда bool.ToString производил True или False.
источник