C#为班级设置特定的文化

C#为班级设置特定的文化,c#,methods,globalization,culture,C#,Methods,Globalization,Culture,我有一个C#类,它有多种方法。我想在这个类的所有方法中使用en-US文化。我可以为特定类设置区域性吗 Background:我有一个列表,其中一些对象是数字,一些是字符串。 我想所有的数字写使用美国文化,但我不知道哪些项目是数字。对象类的ToString()似乎没有使用区域性参数。您可以尝试强制转换项,并在结果项上调用ToString,specyfing Localization a(在发生InvalidCastException时捕获并正确处理它),这是字符串或数字中允许的。这个解决方案充其量

我有一个C#类,它有多种方法。我想在这个类的所有方法中使用
en-US
文化。我可以为特定类设置区域性吗

Background:我有一个
列表
,其中一些
对象是数字,一些是字符串。

我想所有的数字写使用美国文化,但我不知道哪些项目是数字。
对象
类的
ToString()
似乎没有使用区域性参数。

您可以尝试强制转换项,并在结果项上调用ToString,specyfing Localization a(在发生InvalidCastException时捕获并正确处理它),这是字符串或数字中允许的。这个解决方案充其量是难闻的,但是可行的。

类是一个数据结构,而本地化字符串格式是一种行为。从代码/编译器的角度来看,这两件事彼此无关,将其设置为“每个类”也没有意义。这个问题属于使用类的代码的范围,或者属于类本身内部的代码

每个线程设置全局区域性信息(使用
thread.CurrentThread.CurrentCulture
CultureInfo.CurrentCulture
)。您可以做的一件事是将类的每个方法包装在区域性集/还原中。由于线程区域性在所有方面都是一个全局变量,如果您的类在其他地方调用,这可能会有问题

如果要为类指定要使用的区域性,最好的方法是将该区域性的一个实例用作类属性,然后使用大多数字符串/数字格式函数的特定于区域性的重载

class MyClass {
    public CultureInfo Culture { get; set; }

    public void GetSomeString() {
        return new Int32().ToString(Culture);
    }
}
编辑:仔细看看你的问题,我认为你想做的是:

var lastCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
try {
   // loop over list here
}
finally {
    Thread.CurrentThread.CurrentCulture = lastCulture;
}

您可以在循环中检查对象是否为int/float并进行相应的强制转换,或者在循环时设置全局区域性。请参阅我的编辑。@llia:CultureInfo的属性CurrentCulture似乎是只读的:(@llia,nobugz:Thread.CurrentThread.CurrentCulture仍然有效,我已经选择了该解决方案。非常感谢您的回复:)你说得对,我的错。使用
Thread.CultureInfo
是正确的方法。