对象上的固定文化 ToString,该对象使用区域性重载 ToString
本文关键字:对象 ToString 区域性 重载 文化 | 更新日期: 2023-09-27 18:25:14
这是我的问题,我的机器使用法语区域性,因此默认情况下它以法语方式解析 (3,141592(。
如果机器文化不是美国,以下是重现我的问题的代码:
float number = 4103.2680894812f;
Object numObj = number;
double val = Double.Parse(numObj.ToString(), CultureInfo.InvariantCulture);
System.Console.WriteLine(val.ToString(CultureInfo.InvariantCulture));
乍一看,这看起来应该有效,但是 Float ToString 已重载并使用区域性,因此这实际上不起作用。
问题是在实践中返回给我的只是一个对象,因为它可以是字符串、浮点数、双精度或整数。
一个临时解决方案是使用 GetType(( 并检查,但我想知道是否有可能更干净的解决方案。
你可以使用这个:
var currentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrenCulture = CultureInfo.InvariantCulture;
try
{
string s = numObj.ToString();
}
finally
{
Thread.CurrentThread.CurrentCulture = currentCulture;
}
或者,使用这个:
string s;
var formattable = numObj as IFormattable;
if (formattable != null)
{
s = formattable.ToString(null, CultureInfo.InvariantCulture);
}
else
{
s = numObj.ToString();
}
作为建议答案的替代方法,您可以从解析方式中删除InvariantCulture
,这也可以。
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
float number = 4103.2680894812f;
Object numObj = number;
double val = Double.Parse(numObj.ToString());
System.Console.WriteLine(val.ToString(CultureInfo.InvariantCulture));
输出 4103.268