我正在通过字符串格式化“作弊表”的方式,以便我可以看到不同的字符串格式参数如何影响字符串输出。虽然与DateTime
字符串格式化参数的工作,我写了这个小测试:在C#中的字符串格式化#
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);
这就提出了一个FormatException
,但我想知道为什么你不能等格式字符串占位内窝串占位符。
在这种情况下,它应该用format参数替换{0}
,用DateTime.Now
替换{1:{0}}
,后跟冒号和格式参数。
这不可能在C#中吗?
编辑:
对于这个问题,为什么Console.WriteLine("{{0}}", "Hello World");
结果"{0}"
,而不是"{Hello World}"
?
这是一个简单的解决方案(因此+1),但它并没有真正回答你为什么不能嵌套格式的占位符,也许我将不得不编写我自己的字符串格式化实现... – series0ne
@ series0ne,我相信我可能一直在编辑,而你评论,请参阅我的编辑。 –