我在 C# 中有一个类,它有各种方法。我想en-US
在这个类的所有方法中使用文化。我可以为特定班级设置文化吗?
背景:我有一个List<object>
,有些object
是数字,有些是字符串。我想要所有使用美国文化书写的数字,但我不知道哪些项目是数字。object
班级ToString()
似乎不接受文化争论。
我在 C# 中有一个类,它有各种方法。我想en-US
在这个类的所有方法中使用文化。我可以为特定班级设置文化吗?
背景:我有一个List<object>
,有些object
是数字,有些是字符串。我想要所有使用美国文化书写的数字,但我不知道哪些项目是数字。object
班级ToString()
似乎不接受文化争论。
类是一种数据结构,而本地化字符串格式化是行为。从代码/编译器的角度来看,这两件事彼此无关,在“每个类”的基础上设置它是没有意义的。这个问题属于使用类的代码的范围,或者属于类本身的代码。
全局文化信息是按线程设置的(使用Thread.CurrentThread.CurrentCulture
or 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,指定本地化(在 InvalidCastException 发生时捕获并适当地处理它),因为它在字符串或数字中是允许的。解决方案充其量是臭的,但可行。