Попробуйте поймать FormatException - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь поймать исключение FormatException, когда кто-то пытается ввести в int IloscPracownikow что-то, кроме цифр, но я не совсем понимаю, как это должно работать. Я попытался сделать это со строками, но затем, что int должен использоваться в списке, в котором есть int.

                int IloscPracownikow = Int32.Parse(Console.ReadLine());
                try
                {
                    object age = IloscPracownikow;
                }
                catch (FormatException)
                {
                    Console.WriteLine("Podaj liczbe, debilu");
                }

                Console.WriteLine("Podaj rok zalozenia firmy.");
                int Rok = Int32.Parse(Console.ReadLine());

                listaFirm.Add(new Firma(NazwaFirmy, IloscPracownikow, Rok));

Ответы [ 4 ]

3 голосов
/ 21 октября 2019

Не перехватывать исключения , но использовать int.TryParse(): ничего исключение при вводе пользователем (пользователь может ввести любую строку, и это ожидается от имени пользователя)).

  if (int.TryParse(Console.ReadLine(), out int IloscPracownikow)) {
    // User input - Console.ReadLine() - is a valid integer (IloscPracownikow)
    object age = IloscPracownikow;
    ...
  }
  else {
    // User input - Console.ReadLine() - is NOT a valid integer
    Console.WriteLine("Podaj liczbe, debilu");
    ...
  }  

Если вы настаиваете на перехвате исключений, вы должны поместить потенциальный источник исключений (который Int32.Parse) в try {...}

 try {
   // Possible FormatException throw (if user input is not a valid integer)
   int IloscPracownikow = Int32.Parse(Console.ReadLine());

   // and this will never throw FormatException
   object age = IloscPracownikow;

   Console.WriteLine("Podaj rok zalozenia firmy.");

   // Possible FormatException throw
   int Rok = Int32.Parse(Console.ReadLine());

   listaFirm.Add(new Firma(NazwaFirmy, IloscPracownikow, Rok));
 }
 catch (FormatException) {
   // either IloscPracownikow or Rok is invalid
   Console.WriteLine("Podaj liczbe, debilu");
 }
0 голосов
/ 21 октября 2019

Вы должны использовать TryParse. Возвращает true, когда синтаксический анализ сработал, и false в противном случае:

string myLine = Console.ReadLine();
int IloscPracownikow = 0;
if(!Int32.TryParse(myLine, out IloscPracownikow))
{
       Console.WriteLine("Podaj liczbe, debilu");
}
0 голосов
/ 21 октября 2019

Catch будет выполняться только в том случае, если у него есть исключение в пределах try block, так как объявление переменной находится вне области действия, оно не будет перехватывать исключение.

0 голосов
/ 21 октября 2019

Вы должны поместить этот вызов Int32.Parse () в try-catch. Фактически, этот метод генерирует исключение этого типа в случае, если аргумент не может быть проанализирован.

...