使用 C# 在 String 或 Char 上使用 ToString() 时,在啥情况下需要提供 CultureInfo IFormatProvider?
Posted
技术标签:
【中文标题】使用 C# 在 String 或 Char 上使用 ToString() 时,在啥情况下需要提供 CultureInfo IFormatProvider?【英文标题】:With C# under what circumstances do I need to supply a CultureInfo IFormatProvider when using ToString() on a String or Char?使用 C# 在 String 或 Char 上使用 ToString() 时,在什么情况下需要提供 CultureInfo IFormatProvider? 【发布时间】:2018-05-01 22:07:22 【问题描述】:在什么情况下使用 C# 在 String
或 Char
上使用 ToString()
时需要提供 CultureInfo
IFormatProvider
?
我通过数字或日期转换得到它,例如
(-10000.4).ToString(provider: new System.Globalization.CultureInfo("es-ES"));
(-10000.4).ToString(provider: new System.Globalization.CultureInfo("en-US"));
DateTime.Now.ToString(provider: new System.Globalization.CultureInfo("es-ES"));
DateTime.Now.ToString(provider: new System.Globalization.CultureInfo("en-US"));
给予:
-10000,4
-10000.4
01/05/2018 22:49:09
5/1/2018 10:49:09 PM
但是下面的呢:
"Some string".ToString(provider: new System.Globalization.CultureInfo("es-ES"));
"Some string".ToString(provider: new System.Globalization.CultureInfo("en-US"));
我可以使用哪些受文化影响的字符串?
char
也一样。
【问题讨论】:
【参考方案1】:在任何情况下,因为它什么都不做。正如String.ToString(IFormatProvider provider)
的MSDN documentation 所述:
provider
已保留,目前不参与此活动 操作。因为这个方法只是简单地返回当前字符串不变,有 不需要直接调用。
这同样适用于Char.ToString(IFormatProvider provider)
。
String
和 Char
之所以有这个明显没用的方法是
需要实现IConvertible
接口,例如允许从string
到int
、int
到string
等的转换。
【讨论】:
感谢 Adrian,这是 RTFM 的一个案例 :-) 虽然有人想知道为什么要实施它。以上是关于使用 C# 在 String 或 Char 上使用 ToString() 时,在啥情况下需要提供 CultureInfo IFormatProvider?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# String 构造函数 String(Char*) 中,为啥构造函数不期望指向字符数组的指针?