我正在研究字符串格式的“备忘单”,以便了解不同的字符串格式参数如何影响字符串输出。在使用DateTime
字符串格式化参数时,我编写了这个小测试:
char[] dtFormats = new char[] { 'd', 'D', 'f', 'F', 'g', 'G', 'm', 'o', 'r', 's', 't', 'T', 'u', 'U', 'y' };
foreach (char format in dtFormats)
{
Console.WriteLine("DateTime format {0} = {1:" + format + "}", format, DateTime.Now);
}
它所做的只是显示DateTime
使用每个参数的所有不同格式。
除此之外,我想重点关注这一点:
Console.WriteLine("DateTime format {0} = {1:" + format + "}", format, DateTime.Now);
现在我知道它{0}
被替换为 format (argument 0),并被{1:?}
替换为DateTime.Now
(argument 1)。
我试着像这样重写这个:
Console.WriteLine("DateTime format {0} = {1:{0}}", format, DateTime.Now);
这会引发 a FormatException
,但我想知道为什么不能将字符串占位符嵌套在其他格式字符串占位符中。
在这种情况下,它应该替换{0}
为格式参数,并{1:{0}}
替换为DateTime.Now
,后跟冒号和格式参数。
这在 C# 中是不可能的吗?
编辑:
就此而言,为什么会Console.WriteLine("{{0}}", "Hello World");
导致"{0}"
而不是"{Hello World}"
?