Документация формата .net ToString () - PullRequest
11 голосов
/ 06 февраля 2009

Я видел фрагмент кода на днях, который преобразует логическое значение в соответствующее значение «Да» / «Нет»:

CDbl(True).ToString("Yes;Yes;No")

Код работает нормально, но мне любопытно, как он работает, и я не смог найти ответ в документации MSDN для ToString () .

Кто-нибудь может пролить свет на это?

Ответы [ 5 ]

10 голосов
/ 06 февраля 2009

Посмотрите здесь и здесь , для официальной документации. И этот замечательный шпаргалка из блога Джона Шихана!

9 голосов
/ 06 февраля 2009

Он обрабатывается как строка произвольного числового формата . В частности, смотрите раздел о разделителях разделов на связанной странице:

';' Символ используется для разделения разделов для положительных, отрицательных и нулевых чисел в строке формата. Если в строке пользовательского формата есть два раздела, крайний левый раздел определяет форматирование положительных и нулевых чисел, тогда как крайний правый раздел определяет форматирование отрицательных чисел. Если имеется три раздела, самый левый раздел определяет форматирование положительных чисел, средний раздел определяет форматирование отрицательных чисел, а самый правый раздел определяет форматирование нулевых чисел.

2 голосов
/ 06 февраля 2009

Используется строка литерального формата из настроенных строк числового формата. Вы можете предоставить литерал, который отображается на числа, которые являются положительными, отрицательными или нулевыми числами. Первое «да» соответствует положительному значению, второе - отрицательному, а «нет» - нулям. Таким образом, любой ненулевой - это да, а только нули - нет. Это эквивалентно стандартным семантическим интерпретациям истина / ложь для числовых значений.

См. Раздел «Разделитель разделов» на странице Пользовательский числовой формат строк.

1 голос
/ 06 февраля 2009

Steve-X имеет лучшую документацию для String.Format, которую я когда-либо видел: Steve-X ToString ()

Я знаю, что вы запрашивали "ToString", но ToString зависит от реализации, которую вы вызываете (т.е. DateTime.ToString (), decimal.ToString ... и т. Д.).

Если вам действительно интересно, как это работает, откройте отражатель и просмотрите код.

1 голос
/ 06 февраля 2009

Как сказали @Joel Coehoorn и @tvanfosson, он использует пользовательскую строку числового формата. Причина, по которой это работает, заключается в том, что логическое значение может быть преобразовано в двойное число с использованием следующего (по существу):

public static double ToDouble(bool value)
{
    return (value ? ((double) 1) : ((double) 0));
}

Таким образом, если значение равно true, оно возвращает 1, а если значение равно false, возвращает 0. В этот момент применяются правила отображения разделов, как описано @tvanfosson (и впоследствии @Joel Coehoorn).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...