文化不变对象 ToString()

Posted

技术标签:

【中文标题】文化不变对象 ToString()【英文标题】:culture invariant object ToString() 【发布时间】:2011-11-19 10:47:32 【问题描述】:

如何在对象上调用ToString() 并使其使用不变的文化? 在实现IConvertible 的对象上存在ToString() 的重载(如bool、int、float..),但如果有问题的对象不是IConvertible 怎么办?

【问题讨论】:

【参考方案1】:

System.Convert 类有一个静态的ToString 重载,它采用object

Convert.ToString(obj, CultureInfo.InvariantCulture);

基于my benchmarks,这大约是string.Format(CultureInfo.InvariantCulture, "0", value) 的两倍,更重要的是,它看起来更干净。但是,如果您已经在构建字符串,我建议您使用 FormattableString.Invariant。

FormattableString.Invariant($"Object value: obj")

【讨论】:

“看起来更干净”如果您从字符串插值开始,并且要转义多个项目,则不会。使用string.Format,它可以一次性完成所有操作。 @jeromej:这是一个很好的观点,但如果您使用字符串插值,我建议您使用FormattableString.Invariant 以提高可读性。我相应地更新了我的答案。【参考方案2】:

我认为IFormattable是相关接口。它有一个ToString 方法,可以让您指定格式提供程序,它可以是一种文化。

【讨论】:

由于文化是一种格式提供者,您可以将其与String.Format(CultureInfo.InvariantCulture, "0", value)一起使用 建议使用string,而不是String @nitzel:C# 不是 .NET Framework 中的唯一语言。

以上是关于文化不变对象 ToString()的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C# decimal ToString 不请求文化和货币?

C# DateTime ToString 标准文化格式

剑道用户界面中的数字格式

如何与“。”保持一致文化改变后的十进制 ToString

JS中toString()和toLocalString()的区别

瑞典文化信息