2010-02-23 80 views
4

我在C#中有一个类,它有各种方法。我想在这门课的所有方法中使用en-US文化。我可以为特定课程设置文化吗?C#为类设置特定文化

背景:我有一个List<object>和一些object的是数字的,有些是字符串。 我希望所有使用美国文化编写的数字,但我不知道哪些项目是数字。 object类的ToString()似乎不采取文化的论点。

+0

您可以检查,如果对象是一个int /浮在你的循环播放并相应投射,或者在循环播放时设置全球文化。看我的编辑。 – 2010-02-23 16:09:45

回答

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; 
} 
+0

@llia:看起来CultureInfo属性CurrentCulture是只读的:( – Chau 2010-02-24 08:19:38

+0

这段代码不能按给定的方式工作 – 2010-02-24 08:37:28

+0

@llia,nobugz:虽然Thread.CurrentThread.CurrentCulture可以工作,但我选择了这个解决方案。为你的回复:) – Chau 2010-02-24 08:47:45

0

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

相关问题