程序未引发ArgumentOutOfRange异常

时间:2019-06-10 06:46:40

标签: c# try-catch expectations

我有一个简单的程序,该程序从用户处获取一个数字并返回数组中该位置/索引处的数字。但是,如果给定数字不在索引范围内,则会引发异常。 这是我的代码:

        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 exception。 如果我希望异常像“请给一个0-5之间的数字”一样,我该怎么办? (使用try-catch方法)

2 个答案:

答案 0 :(得分:1)

IndexOutOfRangeExceptionArgumentOutOfRangeException之间存在区别。 您必须捕获IndexOutOfRangeException。

答案 1 :(得分:1)

请勿使用异常来指导您的应用程序逻辑流程。最好主动检查索引对于您的数组而言是否太大。该索引号是来自外部的输入,因此您有权在自己认为合适的地方加保护。

除了@Ciubotariu Florin是对的。