Member 11543226 Ответов: 1

Как решить ошибку "входная строка была не в правильном формате"?


Я решил этот тип ошибки ранее, но на этот раз я застрял.
У меня есть файл, содержащий 2 31 200 чисел из 8 и 10 цифр, и я должен суммировать все цифры в каждом номере, а затем добавить сумму в список, но при добавлении сумм я получил ошибку. диапазон сумм - от 0 до 90. Я попробовал "int, Int32, Int64", но с их помощью я получил другую ошибку "Значение было либо слишком большим, либо слишком маленьким для Int32. поэтому я использую "длинный", ссылаясь на некоторые предложения, но моя проблема еще не решена и получаю еще одну ошибку-
Ниже приведен мой код, где я получаю выше ошибки в строке
long sumOfnum = суммирование (преобразование.ToInt64(Allbarcodes[i]));
Что не так в моем коде, пожалуйста, кто-нибудь подскажет мне способ.

Что я уже пробовал:

public long Summation(long n)
     {
         long m, sum = 0;

         while (n != 0)
         {
             m = n % 10;
             sum = sum + m;
             n = n / 10;
         }
         return sum;
     }


 private void button2_Click(object sender, EventArgs e) // do task
     {
        List<long> barcodeList = new List<long>();

        using (FileStream fs = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read))
             using (StreamReader sr = new StreamReader(fs))
             {
                 string barcode_data = sr.ReadToEnd().Replace("\r\n", ",");
                 string[] Allbarcodes = barcode_data.Split(',');

                 for (int i = 0; i < Allbarcodes.Length; i++)
                 {
                     long sumOfnum = Summation(Convert.ToInt64(Allbarcodes[i]));
                     barcodeList.Add(sumOfnum);
                 }
             }
      }

Graeme_Grant

В чем заключается ценность Allbarcodes[i] когда возникает ошибка для выделенной линии:

long sumOfnum = Summation(Convert.ToInt64(Allbarcodes[i]));

Bryian Tan

возможные Allbarcodes[i] = "" ? затем преобразуются.ToInt64 задуть?

Graeme_Grant

Вы смотрели на стоимость? Извини, Брайан, я принял тебя за оперативника.

1 Ответов

Рейтинг:
7

Bryian Tan

Звучит как проблема с данными, эти обходные пути остановят ошибку, но она может загрязнить результаты. Вам нужно выяснить, что когда неправильно в Allbarcodes[i]

1. Используйте TryParse, если не удалось заменить на 0

long sumOfnum = 0;
Int64.TryParse(Allbarcodes[i], out sumOfnum);
barcodeList.Add(sumOfnum);

2. перед преобразованием проверьте, пуст ли Allbarcodes[i]
if (!string.IsNullOrEmpty(Allbarcodes[i]) )
{
    long sumOfnum = Summation(Convert.ToInt64(Allbarcodes[i]));
    barcodeList.Add(sumOfnum);
}


Member 11543226

я попробовал ваш 2-й вариант, и он сработал bcz последняя строка пуста, когда я заменяю "\r\n "на", " Я получаю на самом деле 0-2,31,198 чисел и последние 2 строки пусты, следовательно, я получил ошибку . спасибо