c# - InvariantCulture ToString 在用文化重载 ToString 的对象上

标签 c#

这是我的问题,我的机器使用法语文化,因此默认情况下它以法语方式解析 (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 重载并使用了区域性,所以这实际上不起作用。

问题是实际上返回给我的只是一个对象,因为它可能是 String、Float、Double 或 Int。

临时解决方案是使用 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();
}

关于c# - InvariantCulture ToString 在用文化重载 ToString 的对象上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004542/

相关文章:

c# - JNBridge可以在linux下使用吗?

c# - Typeconverter 不适用于单个属性

c# - GridView:如何设置要显示的行数

c# - .net native 用于桌面应用程序

c# - 当我将它们移动到基类时,我应该如何设置我的私有(private)变量?

c# - 如何使用 SkiaSharp.Views.UWP?

c# 树/思维导图 GUI

C# - 什么是特定于文化的?

c# - 如何找到所有 Controller 和 Action

c# - 使用 WCF REST 的 PUT 和 POST 之间的区别