在两个单独的空隙之间传递错误(C#)

时间:2011-07-10 13:07:47

标签: c# error-handling

我不确定我想做的事情是否可行,但我认为必须有一些解决方法。假设两个例程;例程A和例程B.例程A和B都有自己的try-catch语句。例程A将调用例程B(如下所示),如果例程B遇到某些错误,例程A将被通知它。

以下是我的例子:

// Routine A
private void button13_Click(object sender, EventArgs e)
{
    try
    {
        somevoid();
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.message); // Never makes it here ...
    }
}

// Routine B
private void somevoid()
{
    try
    {
        int i = 1;
        int z = 0;
        int g = i / z;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

6 个答案:

答案 0 :(得分:2)

那么你可以在你的例程B中重新抛出异常,比如

        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }

这样,例程A也可以处理该异常。

不过,这与winforms无关,我会删除那个标志。

希望有所帮助。

答案 1 :(得分:1)

我不确定你想要实现什么,但看起来,你需要在两个try catch块中捕获异常。如果是这样,请按如下所示更改您的代码:

private void somevoid()
        {

            try
            {
                int i = 1;
                int z = 0;
                int g = i / z;
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
        }

答案 2 :(得分:1)

你应该简单地在例程B的catch块上抛出异常:

 ....
 Console.WriteLine(ex.Message);
 throw new InvalidOperationException();
.....

然后例程a的Try块将捕获异常

答案 3 :(得分:0)

只需从例程B中删除try ... catch块。这样,如果例程B中存在异常,它将跳转到例程A中的catch块。

答案 4 :(得分:0)

如果您希望异常冒泡到button13_Click,请从try-catch移除somevoid。如果你打算在例程A中重新抛出异常,那么你必须:

throw new Exception;  // if you wish, you could have a custom exception here  

...或

throw;  // to simply re-throw the exception

在例行B的捕获区内。

答案 5 :(得分:0)

在此插入关于不吞咽异常的必要评论。

现在回答你的问题:你可以在这里做一些事情。

我已经看到一些关于重新抛出异常的答案。

您还可以抛出一种特定类型的异常(您自己创建的),您可以明确地捕获它 - 这为您提供了额外的控制和特异性。

您也可以从方法B返回bool作为成功或失败的指标。您不必在每个调用方法B的地方实际使用它,但如果您根据方法B成功还是失败在方法A中执行不同的操作,则可以检查该结果。您只需返回true块末尾的tryfalse块末尾的catch