.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 и просмотрите код.