2015-01-20 5 views
4

Я использую .NET4По умолчанию Культуры

Я использую смежные США локаль, и хочу, чтобы мое приложение работало только таким образом.

Некоторые из моих клиентов программного обеспечения, однако, из стран (например, в Норвегии), где десятичная точка представлена ​​символом «,».

Поэтому следующая строка бросает исключение для моего норвежского клиента:

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

Я прочитал я могу изменить CurrentCulture следующим образом:

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

Проблема заключается в том, что я должен сделать это для каждой нити отдельно. Более того, я не совсем уверен, где я буду неявно разбирать двойной, поэтому мне придется делать это при каждом создании темы ...

Я читал, что есть решение для .NET 4.5, путем изменения установив DefaultThreadCurrentCulture.

Кто-нибудь думает об общем решении для этого без обновления моей версии .NET framework?

+1

Вы можете написать свои собственные методы синтаксического анализа и указать в них культуру конверсии. – mcy

+0

Где бы вы имели неявное преобразование, с приложением C#? –

+0

@mcy, я имел в виду более общее решение, в котором мне не нужно было выяснять все места, в которых я разобрал double в моем коде ... – user1028741

ответ

4

Я знаю, что вы ищете общее решение, но так, как я работаю вокруг этих вопросов для анализа с помощью CultureInfo.InvariantCulture:

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

Остерегайтесь, хотя, это мои проблемы, потому что, когда ваша строка содержит как запятыми и периодами.

Проверьте ответы на следующей ссылке:

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

+0

Не очень «обходной путь», а скорее «правильный подход». Указание культуры явно является правильным решением, когда вы знаете, какая культура используется. И 'InvariantCulture' кажутся тем, что OP должен использовать, поскольку данные, вероятно, происходят из какого-то другого места, кроме ввода пользователем. –

-3

я думаю, я понял вашу проблему, и это может быть сделано без обновления .Net я надеюсь, что это помогает , как я делал программу я сделал установка для Исходная моей программы, в которой я прошу так сделать диалог, который просит пользователя для страны, а затем добавить десятичного кода в качестве примера statement.here: -

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(); }

+0

взял его из моей старой программы. Надеюсь, это поможет: p или, может быть, я не понял вопроса –

Смежные вопросы