Строка не может быть преобразована в двойной - PullRequest
0 голосов
/ 01 марта 2019

У меня странная проблема.Я начну с того, что показываю ошибку, которую получаю в функции sortLIST, - которая кажется странной.Проблема возникает для строки «i», как видно из ошибки отладки, разделенной символом «,».Первый аргумент равен 0,48, что является двойным.В любом случае ошибка говорит:

Введенная строка была в неправильном формате

Я также попытался удалить строку CultureInfo ("en-Us") безуспешно:

enter image description here

Теперь я попытался смоделировать вышеизложенное и выполнить этот код в элементе управления кнопками, и здесь он работает и не дает ошибок:

private void button1_Click(object sender, EventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    String i = "0.48,trx/btc,coss,hitbtc2,0.0000062000 / 0.0000066000,0.0000061502 / 0.0000061701,,0.48%";
    double test = double.Parse(i.Split(',')[0]);

    MessageBox.Show(test.ToString());
}

Что может вызвать эту ошибку?Я поместил следующую строку во ВСЕ функции в приложении, чтобы быть в безопасности:

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

1 Ответ

0 голосов
/ 01 марта 2019

Изображение, которое вы загрузили, показывает, что вы на самом деле запускаете несколько потоков, но культура устанавливается только для текущего потока.

Чтобы преодолеть это, вы можете присвоить желаемую культуру переменной и использовать ее внутри Task.Factory.StartNew.Вы можете сделать что-то вроде этого:

var culture = new System.Globalization.CultureInfo("en-US");
return Task.Factory.StartNew(() => 
{
    // use culture here
    Thread.CurrentThread.CurrentCulture = culture;

    // your actual code here
    String i = "0.48,trx/btc,coss,hitbtc2,0.0000062000 / 0.0000066000,0.0000061502 / 0.0000061701,,0.48%";
    double test = double.Parse(i.Split(',')[0]);
});

Как указывало @madreflection, вы можете просто передать желаемую культуру методу double.Parse():

// put this at the top of your file
var culture = new System.Globalization.CultureInfo("en-US");

// use this inside Task.Factory.StartNew
double test = double.Parse(i.Split(',')[0], culture);

или даже использовать CultureInfo.InvariantCulture внутриTask.Factory (спасибо @Olivier):

double test = double.Parse(i.Split(',')[0], CultureInfo.InvariantCulture);
...