2015-03-04 2 views
0

Я получаю странную ошибку при запуске, которую я не могу понять. Когда я нахожусь в Visual Studio, ошибка не возникает, пока я не запустил программу. Когда я запускаю его, я получаю сообщение о том, что в типе было необработанное исключение. Это относится к преобразованию поля [0] в int, любому совету?Формат Исключение было необработанной ошибкой

empReader = new StreamReader(fileName); 

       while (empReader.Peek() > -1) 
       { 
        string line = empReader.ReadLine(); //read a line from the text file 
        string[] fields = line.Split(','); 

        int idCheck = Convert.ToInt32(fields[0]); 

        empTempId.Add(idCheck); 
       } 

       empReader.Close(); 
+0

Каково значение 'fields [0]'? Угадав, что это не целое число. –

+0

Несколько проблем: 1) Что такое «поля [0]» (это допустимый формат (и 2) Имеет ли «поля [0]» даже * EXIST *? – FoggyDay

+0

Если он не существует, OP получит исключение IndexOutOfRangeException вместо этого. –

ответ

1

Если вы не уверены, будет ли значение быть целым числом, используйте int.TryParse вместо:

int idCheck; 

if (int.TryParse(fields[0], out idCheck)) 
    empTempId.Add(idCheck); 

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

+0

Вы можете обернуть его в try/catch block –

+2

Правда, но исключения могут быть более дорогими (они выполняют много работы в фоновом режиме, захватывают текущую трассировку стека и многое другое), и я не стал бы беспокоиться, если бы у меня был более изящный способ предотвращая исключение в первую очередь. –

1

Вы можете обернуть его в блок try/catch.

try { 
     int idCheck = Convert.ToInt32(fields[0]); 
     Console.WriteLine("{0} --> {1}", fields[0], idCheck); 
    } 
catch (FormatException) { 
     Console.WriteLine("{0}: Bad Format", fields[0]); 
    } 
catch (OverflowException) { 
     Console.WriteLine("{0}: Overflow", fields[0]); 
    }