C#为课堂设定特定的文化

时间:2010-02-23 15:23:59

标签: c# methods globalization culture

我在C#中有一个有各种方法的类。我想在此类的所有方法中使用en-US culture。我可以为特定班级设置文化吗?

背景:我有一个List<object>,其中一些object是数字,有些是字符串。 我想用美国文化写的所有数字,但我不知道哪些是数字。 object班的ToString()似乎没有采用文化论证。

2 个答案:

答案 0 :(得分:5)

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

每个线程设置全局文化信息(使用Thread.CurrentThread.CurrentCultureCultureInfo.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;
}

答案 1 :(得分:0)

您可以尝试转换项目,并在结果项目上调用ToString,指定本地化(在发生时捕获InvalidCastException并适当地处理它),因为它在字符串或数字中是允许的。解决方案充其量只是臭,但可行。