Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个单独的空隙(C)之间传达错误_C#_Error Handling - Fatal编程技术网

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

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

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

以下是我的例子:


我不确定您想要实现什么,但似乎需要在两个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将杀死堆栈:。投得更好。我会更新我的代码。