使用catch来定制情况

时间:2011-02-12 12:25:37

标签: c#

当您在不使用系统错误的情况下尝试使用特殊条件时,是否可以调用catch?例如,如果值为int值1然后我想使用“catch”。

5 个答案:

答案 0 :(得分:2)

编程中最大的罪恶之一:)不要使用异常来管理编程流程!现在问题 - 如果抛出异常,可以调用catch块。

答案 1 :(得分:1)

你的措辞有点令人困惑,但我认为这就是你想要的。

int value = GetValue();
try
{
    if (value == 1)
        throw new InvalidOperationException();
    HappyPath(value);
}
catch (InvalidOperationException)
{
    SadPath(value);
}

顺便说一下,使用控制流的例外不是最好的做法。

答案 2 :(得分:1)

没有。你应该捕获异常(你可以按类型过滤它们),然后在catch块内你可以过滤任何条件。

答案 3 :(得分:0)

我想你可能会说你只想在特定情况下捕捉异常,并在所有其他情况下通过它?在这种情况下,您可以使用if检查条件,然后throw重新抛出异常:

try
{
    // ...
}
catch (Exception e)
{
    // If it’s any value other than 1, we’re not interested in the exception
    if (value != 1)
        throw;        // note: throw; *not* throw e;

    // Process the exception here
}

答案 4 :(得分:0)

即使CLR允许,也不可能在C#中抛出一个不是从Exception派生的异常。

可以捕获这样的异常,但是无法访问抛出的对象:

try
{
    MethodThatThrows();
}
catch      // This catches everything, even objects not deriving from Exception
{
    // Process exception
}

一旦指定了变量(例如catch (Exception e)),C#就要求类型为Exception或从中派生出来。