Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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#_.net_Exception_Exception Handling_Try Catch - Fatal编程技术网

C# 为什么我的异常没有被发现?

C# 为什么我的异常没有被发现?,c#,.net,exception,exception-handling,try-catch,C#,.net,Exception,Exception Handling,Try Catch,我有以下代码。我将其包含在一个try块中,并“try”捕获异常: try { var response = query.Execute() as QueryOperationResponse; } catch (System.Net.WebException s) { var se = e;

我有以下代码。我将其包含在一个try块中,并“try”捕获异常:

            try
            {
                var response = query.Execute() as QueryOperationResponse;
            }
            catch (System.Net.WebException s)
            {
                var se = e;
                se = se + "aa";
            }
            catch (Exception e)
            {
                var a = e;
                a = a + "ab";
            }
当query.Execute行执行时,它会生成一个异常,VS2010会在以catch(System.Net)开头的行上停止,并给出以下内容:

System.Data.Services.Client.DataServiceQueryException was unhandled by user code
  Message=An error occurred while processing this request.
  Source=System.Data.Services.Client
  StackTrace:
       at System.Data.Services.Client.DataServiceRequest.Execute[TElement](DataServiceContext context, QueryComponents queryComponents)
       at System.Data.Services.Client.DataServiceQuery`1.Execute()
当我单步执行时,我希望它转到代码“var se=2”或“var a=e”。然而,当我单步执行F11时,下一行是完全跳出该代码块/方法

为什么异常不属于其中一个捕获桶?我完全困惑了。

变量声明(如
var se
)不是可执行语句,因此调试器不会在该行代码上停止

第二个问题是,您在第二个catch块中重新调用异常。完全没有理由捕获异常然后重新调用它。如果您不打算处理它,而只是重新调用它,那么首先就没有必要捕获它

还请记住(正如Henk提到的)当单步执行代码时,优化可能会干扰事情。在尝试理解执行顺序之前,请确保您在构建项目时禁用了所有优化


除了您在调试器中看到的单步执行代码之外,为什么您认为它没有进入相应的catch块?我从未见过异常处理代码不起作用

如果您真的想知道您是否在某个catch块中登录,请在该块中放置一些具有可见效果的代码类型。例如,调用
MessageBox.Show()
。如果您看到消息框,那么您就进入了catch块。如果没有,那么您就没有

在调试过程中,有时消息框会引入其他副作用,特别是在编写UI代码时,但这不是其中之一。

变量声明(如
var se
)不是可执行语句,因此调试程序不会在该行代码上停止

第二个问题是,您在第二个catch块中重新调用异常。完全没有理由捕获异常然后重新调用它。如果您不打算处理它,而只是重新调用它,那么首先就没有必要捕获它

还请记住(正如Henk提到的)当单步执行代码时,优化可能会干扰事情。在尝试理解执行顺序之前,请确保您在构建项目时禁用了所有优化


除了您在调试器中看到的单步执行代码之外,为什么您认为它没有进入相应的catch块?我从未见过异常处理代码不起作用

如果您真的想知道您是否在某个catch块中登录,请在该块中放置一些具有可见效果的代码类型。例如,调用
MessageBox.Show()
。如果您看到消息框,那么您就进入了catch块。如果没有,那么您就没有

在调试过程中,有时消息框会引入其他副作用,特别是在编写UI代码时,但这不是其中之一。

DataServiceQuery.Execute()是一种异步方法,您必须传递委托并调用e.MarkErrorAsHandled().Exception稍后显示,它不在同一执行管道中

错误将包含抛出的异常

query.Execute( e=>{
    MessageBox.Show(e.Error.ToString());
    e.MarkErrorAsHandled();
});

确切的名称必须不同,但它们将显示在intellisense上。

DataServiceQuery.Execute()是一种异步方法,在该方法中,您必须传递委托并调用e.MarkErrorAsHandled()。异常稍后显示,并且它不在同一执行管道中

错误将包含抛出的异常

query.Execute( e=>{
    MessageBox.Show(e.Error.ToString());
    e.MarkErrorAsHandled();
});


确切的名称必须不同,但它们将显示在intellisense上。

您可以让它逐行执行,但您的代码实际上需要在捕获中执行某些操作

例如,只是

String t = "Testing";    
t += "Another test";

这将使您进入其中,您至少可以查看异常。我假设您正试图这样做?

您可以让它逐行执行,但您的代码实际上需要在catch中执行一些操作

例如,只是

String t = "Testing";    
t += "Another test";

这将使您进入其中,您至少可以查看异常。我假设您正试图这样做?

如果您想捕获异常,请使用
DataServiceQueryException

catch (DataServiceQueryException ex)
 {
ex.Message
}

如果要捕获异常,请使用
DataServiceQueryException

catch (DataServiceQueryException ex)
 {
ex.Message
}

您正在第二个catch块中抛出异常。这是否启用了优化功能?无论如何,代码将注定要转到
抛出;
。这里的代码只是测试代码。我正在期待并尝试测试它是否会进入catch。我如何进行测试,但仍然不确定为什么它不会转到那里。您正在抛出异常在第二个catch块中。这是否启用了优化功能?无论如何,代码将注定要转到
抛出;
。这里的代码只是测试代码。我期待并尝试测试它是否会进入catch。我如何测试它,但仍然不确定它为什么没有进入那里。我更新了代码,在catch blo中添加了其他语句cks。调试器仍然没有在这些问题上停止。我更新了代码以在catch块中添加其他语句。调试器仍然没有在这些问题上停止。感谢您的回答。听起来您有解决方案。感谢您的回答。听起来您有解决方案。实际上正确地查看您的问题(不应在深夜执行stackoverflow:)-我同意Akash Kava的观点。这很可能是因为错误在另一个线程中。实际上,正确地查看您的问题(不应在深夜执行stackoverflow:)-我同意Akash Kava的观点。这很可能是因为错误