提问人:chtenb 提问时间:6/21/2022 更新时间:6/21/2022 访问量:215
我的 CultureInfo.InvariantCulture 不是不变的
My CultureInfo.InvariantCulture is not being invariant
问:
我有一个非常奇怪的问题。我的 C# 交互为我提供了:
> string.Format("{0:P1}", 0, CultureInfo.InvariantCulture)
"0.0%"
但是,在调试器中,相同的表达式会生成其他内容:
> string.Format("{0:P1}", 0, CultureInfo.InvariantCulture)
"0.0 %"
有没有人知道这是怎么发生的?
答:
0赞
chtenb
6/21/2022
#1
好吧,看来我搞砸了争论的顺序。我应该有
string.Format(CultureInfo.InvariantCulture, "{0:P1}", 0)
显然,编译器和运行时可以处理多余的格式参数,并且很乐意为您丢弃它们。
OP 中的表达式将使用当前文化,正如@JeroenMostert所建议的那样,该文化在框架和核心之间可能确实具有不同的语义。
评论
0赞
Jeroen Mostert
6/21/2022
哦,这很整洁。这就是为什么插值字符串要好得多的原因。:P
0赞
GSerg
6/21/2022
are fine with superfluous format arguments and will happily discard them
- 是的,这是一个重要的功能。
0赞
chtenb
6/21/2022
@GSerg,这如何归类为一项重要功能?xD
0赞
GSerg
6/21/2022
@chtenb 它允许您将或多或少详细的模板字符串传递给单个调用。这不仅对于控制日志记录非常方便,而且对于国际化也非常方便,对于某些语言,您根本不需要某些参数。想象一下,情况并非如此,您的程序支持可本地化的资源。对于每次调用,您都需要首先获取模板字符串,正确解析它,然后包含一个以使用当前语言版本预期的确切数量的参数调用该模板。string.Format
string.Format
{X}
switch
评论