我仍然处于学习编程的迷雾中,实际上非常迷失在那雾中。有人可以帮助我,请正确实现这一点,下面是我的代码,基本上我有一个方法,它接受一个值,在一个开关内测试该值。
我对如何正确捕获ArgumentOutOfRangeException非常困惑:S
public string InTheBox(int x)
{
try
{
//switch statment to lookup log ID
switch (x)
{
case 0:
return "Outter";
case 1:
return "Inner";
case 2:
return "Border";
default:
throw new ArgumentOutOfRangeException("Unknown value");
}
}
catch (ArgumentOutOfRangeException)
{
throw new ArgumentOutOfRangeException("Unknown value");
}
}
如果有人可以请我解释这种例外的最简洁方法。谢谢!
答案 0 :(得分:10)
为什么你有try catch块?你可以简单地拥有
public string InTheBox(int x)
{
//switch statment to lookup log ID
switch (x)
{
case 0:
return "Outter";
case 1:
return "Inner";
case 2:
return "Border";
default:
throw new ArgumentOutOfRangeException("Unknown value");
}
}
答案 1 :(得分:4)
你在这里不需要try { } catch { }
- 你没有做任何事情来解决这个方法中的情况,所以你只想抛出异常(就像你一样)并将它留给方法调用这个来处理异常。
答案 2 :(得分:2)
除非你打算用它做什么,否则不要抓住它:
public string InTheBox(int x)
{
//switch statment to lookup log ID
switch (x)
{
case 0:
return "Outter";
case 1:
return "Inner";
case 2:
return "Border";
default:
throw new ArgumentOutOfRangeException("Unknown value");
}
}
答案 3 :(得分:2)
在这种方法中你不需要try-catch块 - 它只会重新抛出异常,所以不会改变任何东西。
结构异常处理的基本思想是,您可以处理异常而不是发生异常。您在该方法中抛出异常并在您调用方法的区域中处理它。
所以你的方法应该是那样的
public string InTheBox(int x)
{
//switch statment to lookup log ID
switch (x)
{
case 0:
return "Outter";
case 1:
return "Inner";
case 2:
return "Border";
default:
throw new ArgumentOutOfRangeException("Unknown value");
}
}
但是你这样称呼它:
try
{
//some code
InTheBox(someValue);
//perhaps some other code
}
catch(ArgumentOutOfRangeException ex)
{
//Action you take when exception occurs, perhaps notifying the user.
}
答案 4 :(得分:0)
这取决于您希望此方法执行的操作。如果参数无效则抛出异常,那么只需删除try / catch。
答案 5 :(得分:0)
问候..你唯一缺少的是你的捕获必须有一个变量来分配异常......
取代:
catch (ArgumentOutOfRangeException)
{
throw new ArgumentOutOfRangeException("Unknown value");
}
与
catch (ArgumentOutOfRangeException ex)
{
throw new ArgumentOutOfRangeException("Unknown value");
}
当然,您创建catch/throw ... new
的情况是多余的,但我假设您是从较大的场景中提取此问题以便设置您的问题。
我建议做一些超出范围的事情:
default:
throw new ArgumentOutOfRangeException("Value out of range " + x.toString());
这可能有助于您解决导致意外值的任何问题。
希望这能让你朝着正确的方向前进。
干杯,
CEC