我在C#中有一个类,它有各种方法。我想在这门课的所有方法中使用en-US
文化。我可以为特定课程设置文化吗?C#为类设置特定文化
背景:我有一个List<object>
和一些object
的是数字的,有些是字符串。 我希望所有使用美国文化编写的数字,但我不知道哪些项目是数字。 object
类的ToString()
似乎不采取文化的论点。
我在C#中有一个类,它有各种方法。我想在这门课的所有方法中使用en-US
文化。我可以为特定课程设置文化吗?C#为类设置特定文化
背景:我有一个List<object>
和一些object
的是数字的,有些是字符串。 我希望所有使用美国文化编写的数字,但我不知道哪些项目是数字。 object
类的ToString()
似乎不采取文化的论点。
一个类是一个数据结构,而本地化的字符串格式是行为。从代码/编译器的角度来看,这两件事与彼此没有任何关系,并且将它设置为“每个类”是没有意义的。这个问题属于使用类的代码的范围,或者类本身的代码。
全球文化信息设置为每个线程(使用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;
}
您可以尝试转换您的项目,并在生成的项目上调用ToString,specyfing localizationa(在发生并捕获InvalidCastException时适当地),因为它在字符串或数字中是允许的。解决方案充其量是臭,但可行。
您可以检查,如果对象是一个int /浮在你的循环播放并相应投射,或者在循环播放时设置全球文化。看我的编辑。 – 2010-02-23 16:09:45