在两个独立的空格之间传递错误(c#)

本文关键字:之间 错误 空格 独立 两个 | 更新日期: 2023-09-27 18:01:45

我不确定我所要做的是否可能,但我认为必须有一些工作围绕它。假设两个例程;例程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);
    }
}

在两个独立的空格之间传递错误(c#)

您可以在例程B中重新抛出异常,如

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

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

Btw,这与winforms无关,我将删除该标志。

希望对你有帮助。

我不确定你想要实现什么,但似乎,你需要在两个try catch块中捕获异常。如果是这样,按如下方式修改代码:

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

你应该在例程B的catch块上抛出一个异常,像这样:

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

则例程a的Try块将捕获异常

删除try…这样,如果例程B中有异常,它将跳转到例程a中的catch块。

在这里插入关于不吞下异常的必要注释。

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

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

你还可以抛出一个可以显式捕获的特定类型的异常(你自己创建的)——这给了你额外的控制和特异性。

您也可以从方法B返回bool作为成功或失败的指示器。你不必在调用方法B的每个地方都使用那个,但如果你在方法A中做不同的事情取决于方法B是成功还是失败,你可以检查那个结果。您只需在try块的末尾返回true,在catch块的末尾返回false

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

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

还是……

throw;  // to simply re-throw the exception

在例程b的catch块中