C# 程序未引发ArgumentOutOfRange异常
我有一个简单的程序,它从用户那里获取一个数字,并返回数组中该位置/索引处的数字。但是,如果给定的数字不在索引范围内,则会引发异常。 这是我的密码:C# 程序未引发ArgumentOutOfRange异常,c#,try-catch,expectations,C#,Try Catch,Expectations,我有一个简单的程序,它从用户那里获取一个数字,并返回数组中该位置/索引处的数字。但是,如果给定的数字不在索引范围内,则会引发异常。 这是我的密码: int[] arr = { 1, 2, 3, 4, 5, 6 }; Console.WriteLine("input int"); int k = int.Parse(Console.ReadLine()); Console.WriteLine("befo
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方法)和之间存在差异。
您必须捕获IndexOutOfRangeException。和之间存在差异。
您必须捕获IndexOutOfRangeException。不要使用异常来引导应用程序逻辑流。如果索引对于阵列来说不是太大,最好主动检查。此索引编号是外部输入的,因此您有权在其上设置任何您认为合适的防护装置
除此之外,@Ciubotariu Florin是正确的。不要使用异常来指导应用程序逻辑流。如果索引对于阵列来说不是太大,最好主动检查。此索引编号是外部输入的,因此您有权在其上设置任何您认为合适的防护装置
除此之外,@Ciubotariu Florin是对的。你能解释一下你的意思吗?如果你需要的是在索引超出范围时得到错误消息“请给出一个介于0-5之间的数字”,那么只需在
int l=arr[k]之前写一个If语句代码>如下:如果(k<0 | | k>5)抛出新的ArgumentException(“请给出一个介于0-5之间的数字”)代码>而不是使用try catch块。这样你就可以更明确地表达你的意图。是的,我知道,我只是在尝试,因为这对我来说是一个新课题。你能解释一下你的意思吗?如果你需要的是在索引超出范围时得到错误消息“请给出一个介于0-5之间的数字”,那么就在int l=arr[k]之前写一个If语句代码>如下:如果(k<0 | | k>5)抛出新的ArgumentException(“请给出一个介于0-5之间的数字”)代码>而不是使用try catch块。是的,我知道,我只是在尝试,因为这对我来说是一个新课题。