在两个独立的空格之间传递错误(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);
}
}
您可以在例程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块中