C# 在两个单独的空隙(C)之间传达错误
我不确定我想做的事情是否可行,但我想一定有一些解决办法。假设两个例程;例程A和例程B。例程A和例程B都有自己的try-catch语句。例程A将调用下面所示的例程B,如果例程B遇到错误,将通知例程A 以下是我的例子:C# 在两个单独的空隙(C)之间传达错误,c#,error-handling,C#,Error Handling,我不确定我想做的事情是否可行,但我想一定有一些解决办法。假设两个例程;例程A和例程B。例程A和例程B都有自己的try-catch语句。例程A将调用下面所示的例程B,如果例程B遇到错误,将通知例程A 以下是我的例子: 我不确定您想要实现什么,但似乎需要在两个try-catch块中捕获异常。如果是,请按如下方式更改代码: private void somevoid() { try { int i = 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;
}
}
我不确定您想要实现什么,但似乎需要在两个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 (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
这样,例程A也可以处理该异常
顺便说一句,这与winforms无关,我会删除该标志
希望这能有所帮助。您可以在例行程序B中重新显示异常,如
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
这样,例程A也可以处理该异常
顺便说一句,这与winforms无关,我会删除该标志
希望有帮助。您应该在例程B的catch块上简单地抛出一个异常,如下所示:
....
Console.WriteLine(ex.Message);
throw new InvalidOperationException();
.....
然后例程a的Try块将捕获异常您应该简单地在例程B的catch块上抛出异常,如下所示:
....
Console.WriteLine(ex.Message);
throw new InvalidOperationException();
.....
然后例程a的Try块将捕获异常只需从例程B中删除Try…catch块。这样,如果例程B中存在异常,它将跳转到例程a中的catch块。只需从例程B中删除Try…catch块。这样,如果例程B中存在异常,它将跳转到例程A中的catch块。如果希望异常冒泡到按钮13,请单击,然后从somevoid中删除try catch。如果您打算在例程A中实际重新抛出异常,则必须:
throw new Exception; // if you wish, you could have a custom exception here
或者
在例程B的catch块中。如果希望异常冒泡到按钮13\u单击,然后从somevoid中删除try catch。如果您打算在例程A中实际重新抛出异常,则必须:
throw new Exception; // if you wish, you could have a custom exception here
或者
在例程B的catch块中插入关于不接受异常的必要注释 现在回答你的问题:这里有几件事你可以做 我已经看到一些关于重新抛出异常的答案已经发布 您还可以抛出您自己创建的特定类型的异常,您可以显式捕获该异常-这将为您提供额外程度的控制和特殊性
您还可以从方法B返回bool,作为成功或失败的指示器。实际上,您不必在调用方法B的每个地方都使用该方法,但是如果您在方法A中根据方法B的成功与否来执行不同的操作,您可以检查该结果。您只需在try块的末尾返回true,在catch块的末尾返回false。在此处插入关于不接受异常的必要注释 现在回答你的问题:这里有几件事你可以做 我已经看到一些关于重新抛出异常的答案已经发布 您还可以抛出您自己创建的特定类型的异常,您可以显式捕获该异常-这将为您提供额外程度的控制和特殊性
您还可以从方法B返回bool,作为成功或失败的指示器。实际上,您不必在调用方法B的每个地方都使用该方法,但是如果您在方法A中根据方法B的成功与否来执行不同的操作,您可以检查该结果。您只需在try块的末尾返回true,在catch块的末尾返回false。Don throw ex,这样您将丢失stacktrace信息,因为您基本上会抛出一个新异常,只需重用旧异常。扔就够了,不好。throw-ex将终止堆栈跟踪。“你最好还是扔吧。”柏拉图,谢谢你,这太完美了。其他答案也很准确-谢谢你们!另外,我觉得有必要指定一个事实,这是一个表单应用程序,因为人们总是这样!抱怨不知道……是的,你是对的!throw-ex将杀死堆栈:。投得更好。我会更新我的代码。Don throw ex,那样你会丢失stacktrace信息,因为你基本上会抛出一个新的异常,只是重复使用旧的异常。扔就够了,不好。throw-ex将终止堆栈跟踪。“你最好还是扔吧。”柏拉图,谢谢你,这太完美了。其他答案也很准确-谢谢你们!另外,我觉得有必要指定一个事实,这是一个表单应用程序,因为人们总是这样!抱怨不知道……是的,你是对的!throw-ex将杀死堆栈:。投得更好。我会更新我的代码。