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