我正在学习字符串格式化"小抄",以便了解不同的字符串格式化参数如何影响字符串输出。在使用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}
会被格式化为(参数0),而{1:?}
会被替换为DateTime.Now
(参数1)。
我尝试重新编写如下:
Console.WriteLine("DateTime format {0} = {1:{0}}", format, DateTime.Now);
这会引发一个“格式异常”,但我想知道为什么不能将字符串占位符嵌套在其他格式字符串占位符中。
在这种情况下,它应该用格式参数替换“{0}”,并用“DateTime.Now”替换“{1:{0}}”,后跟一个冒号和格式参数。
在C#中难道不可能吗?
编辑:
说到这,为什么
Console.WriteLine("{{0}}", "Hello World");
的结果是"{0}"
而不是"{Hello World}"
?