.net ToString()
Я видел фрагмент кода на днях, который преобразует булево значение в соответствующее значение "Да" / "Нет":
CDbl(True).ToString("Yes;Yes;No")
Код работает нормально, но мне любопытно, как это работает, и я не смог найти ответ в документации MSDN для ToString().
Может ли кто-нибудь пролить свет на это?
Ответы
Ответ 1
Он рассматривает его как Строка пользовательского числового формата. В частности, см. Раздел о разделителях раздела на связанной странице:
";" символ используется для разделения секций для положительных, отрицательных и нулевых чисел в строке формата. Если в строке пользовательского формата есть два раздела, крайний левый раздел определяет форматирование положительных и нулевых чисел, а самый правый раздел определяет форматирование отрицательных чисел. Если есть три раздела, левая часть определяет форматирование положительных чисел, средняя часть определяет форматирование отрицательных чисел, а крайняя правая часть определяет форматирование нулевых чисел.
Ответ 2
Посмотрите здесь и здесь, для официальных документация.
И этот большой cheatsheet из блога Jhon Sheehan!
Ответ 3
Он использует строчную строку формата из строковых строк с цифровым форматированием. Вы можете предоставить литерал, который отображает на онемения, которые являются позитивными, отрицательными или нулевыми. Первое "да" соответствует положительному, второе - отрицательному, а "нет" - нулям. Таким образом, любое ненулевое значение да, и только нули - нет. Это эквивалентно стандартным истинным/ложным семантическим интерпретациям по числовым значениям.
Посмотрите раздел "разделитель раздела" страницы Пользовательский числовой формат.
Ответ 4
Как сказал @Joel Coehoorn и @tvanfosson, он использует пользовательскую строку числового формата. Причина, по которой он работает, заключается в том, что логическое значение конвертируется в double, используя следующие (по существу):
public static double ToDouble(bool value)
{
return (value ? ((double) 1) : ((double) 0));
}
Итак, если значение истинно, оно возвращает 1, а если значение ложно, оно возвращает 0. В этот момент применяются правила отображения разделов, как описано @tvanfosson (а затем @Joel Coehoorn).
Ответ 5
У Steve-X есть лучшая документация для String.Format, которую я видел до сих пор: Steve-X ToString ()
Я знаю, что вы спросили "ToString", но ToString зависит от выполняемой вами реализации (т.е. DateTime.ToString(), decimal.ToString... и т.д.).
Если вы действительно заинтересованы в том, как он работает, откройте reflector и просмотрите код.