.NET中的ToString()格式文档

11

我前几天看到了一段将布尔值转换为相应的"Yes"/"No"值的代码片段:

CDbl(True).ToString("Yes;Yes;No")
代码能够正常工作,但我想知道它是如何工作的,而我在 ToString() 的 MSDN 文档 中没有找到答案。
有人可以解释一下吗?
5个回答

10

更具体地说,从提到的备忘单中:“;”分隔符用于在格式字符串中分隔正数、负数和零数的部分。 - Arjan Einbu
Jhon Sheehan的备忘单非常实用! - Chuck Conway

9
它将其视为自定义数字格式字符串。 具体来说,请参见链接页面中关于分节符的部分:
“;”字符用于在格式字符串中分隔正数,负数和零数的部分。 如果自定义格式字符串中有两个部分,则最左侧的部分定义正数和零数的格式,而最右侧的部分定义负数的格式。如果有三个部分,则最左侧的部分定义正数的格式,中间部分定义负数的格式,最右侧的部分定义零数的格式。

2
它使用自定义数字格式字符串中的文字格式字符串。您可以提供映射到正数、负数或零的文字。第一个“yes”映射到正数,第二个映射到负数,“no”映射到零。因此,任何非零都是“yes”,只有零才是“no”。这相当于数字值上的标准true/false语义解释。
请查看“分节符”部分的“Custom Numeric Format”字符串页面。 链接:Custom Numeric Format

1

Steve-X的String.Format文档是我迄今为止见过的最好的:Steve-X ToString()

我知道你要求的是“ToString”,但ToString取决于你调用的实现(即DateTime.ToString(),decimal.ToString等)。

如果你真的对它的工作原理感兴趣,可以打开反编译器并查看代码。


1
如@Joel Coehoorn和@tvanfosson所说,它使用了自定义数字格式字符串。它之所以有效的原因是布尔值可通过以下方式转换为双精度浮点数(本质上):
public static double ToDouble(bool value)
{
    return (value ? ((double) 1) : ((double) 0));
}

因此,如果值为true,则返回1,如果值为false,则返回0。此时,根据@tvanfosson(以及随后的@Joel Coehoorn)所述的部分映射规则适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接