C# switch statement try and catch help required

本文关键字:catch help required and try switch statement | 更新日期: 2023-09-27 17:48:56

我还在学习编程的迷雾中,实际上很迷失在迷雾中。有人可以帮助我,请实现这个正确的,下面是我的代码,基本上我有一个方法,在一个值,测试开关内的值。

我只是很困惑如何捕获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");
        }
    }

如果有人可以解释给我最干净的方法来捕获这些异常。谢谢你!

C# switch statement try and catch help required

为什么要使用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 { } 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-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.
}

这取决于您想要这个方法做什么。如果它应该在参数无效时抛出异常,那么只需完全删除try/catch。

问候…您唯一缺少的是,您的catch必须有一个变量来将异常赋值给…

替换:

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