Как исправить ошибку ввода строки при преобразовании строки - PullRequest
0 голосов
/ 18 апреля 2019

Я отмечаю некоторый код и не могу понять, почему эта ошибка продолжает возникать (Тот же код работает на других решениях ученика. Это простая форма добавления клиента. Попытка добавить детали в текстовый файл. Ошибка "Входная строка былане в правильном формате "продолжает появляться при нажатии на кнопку, чтобы добавить. Вся помощь приветствуется Код показан ниже:

  if (File.Exists("CompetitorDataFile.txt"))
                {
                    string[] arr = 
    File.ReadLines("CompetitorDataFile.txt").ToArray();
                    I = arr.Length;
                    ID = I + 1;
                    textBox2.Text = Convert.ToString(ID);

                    for (int z = 0; z  < arr.Length; z++)
                    {
                        string[] arr2 = arr[z].Split('~');

                        if (FrmAdd.ID == Convert.ToInt32(arr2[1]))
                        {
                            valid2 = false;
                            MessageBox.Show("Unique ID needed", 
     "Error");
                        }
                    }
                }
                else
                {
                    ID = I;
                    textBox2.Text = Convert.ToString(ID);

                }

1 Ответ

0 голосов
/ 18 апреля 2019

Я внес небольшие изменения в ваш код, предоставив и выполнив основной регион, в котором вы столкнулись с ошибкой.

Не уверен, что как ваш входной массив строк, я предполагаю, что в обоих случаях,

1 - содержит строку "ba ~ 7U", "m4 ~ ro5" - сбой преобразования

2 - только цифры "01XX ~ 78", - Пройдено преобразование

( "01XX ~ 70000000008", , сбой происходит по типу intно превышает пределы int)

   static void test()
    {
        int ID, I = 0; int SomeValue = 0;
        //if (File.Exists("CompetitorDataFile.txt"))
        //{
        string[] arr = new string[] { "01XX~78", "ba~7U", "m4~ro5" };
        I = arr.Length;
        ID = I + 1;
        var ss = Convert.ToString(ID);
        int val=0;
        for (int z = 0; z < arr.Length; z++)
        {
            string[] arr2 = arr[z].Split('~');

            if (SomeValue == checkConvertion(arr2[1] ))
            {
              var  valid2 = false;
            }
        }
        //}
        //else
        //{
        //    ID = I;
        //    var res = Convert.ToString(ID);

        //}
    }

   static  int checkConvertion(string stringInput)
    {
        int val;
        var convertionResult = int .TryParse(stringInput, out val);
        // int.Parse(stringInput);  -- also you can use this
        return convertionResult ? val : 0;
    }

Вы должны быть более осторожны с диапазоном типа данных int, если он превышает int. Max

(извините за редактирование кода, плохие названия конвенций и комментирование многих областей, я просто хочу показать вам конверсию)

...