C#switch语句尝试并捕获所需的帮助

时间:2011-04-03 19:38:45

标签: c# exception-handling

我仍然处于学习编程的迷雾中,实际上非常迷失在那雾中。有人可以帮助我,请正确实现这一点,下面是我的代码,基本上我有一个方法,它接受一个值,在一个开关内测试该值。

我对如何正确捕获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");
        }
    }

如果有人可以请我解释这种例外的最简洁方法。谢谢!

6 个答案:

答案 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

相关问题