Программа не выдает исключение ArgumentOutOfRange - PullRequest
0 голосов
/ 10 июня 2019

У меня есть простая программа, которая берет число от пользователя и возвращает число, расположенное в этой позиции / индексе в массиве. Однако, если данное число не входит в диапазон индекса, оно выдает исключение. Вот мой код:

        int[] arr = { 1, 2, 3, 4, 5, 6 };    
            Console.WriteLine("input int");
            int k = int.Parse(Console.ReadLine());
            Console.WriteLine("before");
            try
            {
                double n = 5 / k;
                Console.WriteLine(n);
            int l=arr[k];
            Console.WriteLine(l);
            }
            catch (DivideByZeroException)
            {

                throw new ArgumentException("you cant divid by 0!");

            }
        catch (ArgumentOutOfRangeException)
        {

            throw new ArgumentException("please give a number between 0-5");

        }
        catch (Exception)
        {

            throw new ArgumentException("something went worng, please try again");

        }
        finally
            {
                Console.WriteLine("after");
                Console.WriteLine("process compited!");
            }

Проблема, однако, заключается в том, что если введенное число равно 7, что не входит в диапазон, оно показывает исключение ArgumentOutOfRangeException. Что мне делать, если я хочу, чтобы исключение было похоже на «пожалуйста, дайте число от 0 до 5»? (используя метод try-catch)

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Не используйте исключения для управления потоком логики вашего приложения. Лучше заранее проверить, не слишком ли велик индекс для вашего массива. Этот порядковый номер является вводом извне, поэтому вы имеете право поставить на него любого охранника, который сочтете нужным.

Кроме этого @Ciubotariu Флорин прав.

1 голос
/ 10 июня 2019

Существует разница между IndexOutOfRangeException и ArgumentOutOfRangeException . Вместо этого вы должны перехватить IndexOutOfRangeException.

...