默认文化

时间:2015-01-20 15:12:24

标签: c# .net-4.0 internationalization cultureinfo culture

我使用.NET4

我使用的是en-US语言环境,并希望我的应用程序只能以这种方式工作。

我的一些软件客户端来自国家(例如挪威),小数点由','表示。

因此,下一行会为我的挪威客户端抛出异常:

double a = double.Parse("1.5");

我读过我可以按如下方式更改CurrentCulture:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

问题是我必须单独为每个线程执行此操作。而且,我不完全确定在哪里隐式解析double,所以我必须在每个Thread创建时都这样做...

通过更改DefaultThreadCurrentCulture的设置,我已经阅读了.NET 4.5的解决方案。

如果没有升级我的.NET框架版本,有没有人会想到一个通用的解决方案?

2 个答案:

答案 0 :(得分:4)

我知道您正在寻找一般解决方案,但我解决这些问题的方法是使用CultureInfo.InvariantCulture进行解析:

double a = double.Parse("1.5", CultureInfo.InvariantCulture);

请注意,当您的字符串同时包含逗号和句点时,我的原因就会出现。

通过以下链接查看答案:

How do I parse a string with a decimal point to a double?

答案 1 :(得分:-3)

我想我理解你的问题,这可以在不升级.Net的情况下完成我希望这有帮助 因为我正在编写一个程序,我为我的程序设置了一个初始设置 所以制作一个会询问用户国家的对话框,然后将你的十进制代码添加为一个案例陈述。其中: -

void AskForACountry() { frmEdit = new Form(); frmEdit.ShowIcon = false; cmbxLang = new ComboBox(); frmEdit.Size = new Size(199, 113); Button btnSetLang = new Button(); btnSetLang.Size = new Size(88, 23); btnSetLang.Text = "Set Language"; btnSetLang.Location = new Point(40, 39); cmbxLang.Location = new Point(28, 12); cmbxLang.DropDownStyle = ComboBoxStyle.DropDownList; String[] arrayCountry = { "Catalan - Spain", "Chinese - China", "Chinese - Hong Kong", "Chinese - Taiwan", "Danish - Denmark", "Dutch - Netherlands", "English - Australia", "English - Canada", "English - Great Britain", "English - US", "Finnish - Finland", "French - Canada", "French - France", "German - Germany", "Italian - Italy", "Japanese - Japan", "Korean - Korea", "Norwegian - Norway", "Polish - Poland", "Portuguese - Brazil", "Portuguese - Portugal", "Russian - Russia", "Spanish - Mexico", "Spanish - Spain", "Swedish - Sweden" }; cmbxLang.DataSource = arrayCountry.ToList(); btnSetLang.Click += new EventHandler(btnSetLang_Click); frmEdit.Controls.Add(cmbxLang); frmEdit.Controls.Add(btnSetLang); MessageBox.Show("Please select a country that fits your computer's default language and dialect.", "Select A Country"); frmEdit.StartPosition = FormStartPosition.CenterScreen; frmEdit.AcceptButton = btnSetLang; frmEdit.ShowDialog(); }