我有一个多线程应用程序来解析一些文本,它需要使用英语文化信息来解析文本中的数字。 所以,我不想每次调用解析函数时都创建 EngCulture。目前我将 EngCulture 作为参数传递,但我对此并不满意。 我想将 EngCulture 定义为静态成员,以便线程共享它。
Msdn 文档说“此类型的任何公共(public)静态(在 Visual Basic 中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。” 我只是在使用以下函数,那么我怎么知道 TryParse 是否使用了 EngCulture 的任何实例成员?
public static CultureInfo EngCulture = new CultureInfo("en-US", false);
void parser()
{
if (int.TryParse(value, NumberStyles.Number, EngCulture, out num))...
}
最佳答案
尝试使用 CultureInfo.GetCultureInfo("en-US")
来“使用指定的文化名称检索缓存的只读文化实例。”
http://msdn.microsoft.com/en-us/library/yck8b540.aspx
或者将你的字段设为只读,这样你就不需要锁了:
private static CultureInfo _culture = CultureInfo.ReadOnly(new CultureInfo("en-US"));
关于c# - CultureInfo线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298491/