NullReferenceException 未在 catch 块中捕获(Array.Sort 方法)

Abd*_*oiz 1 c# msdn exception

try
{
    Array.Sort(PokeArray, (x1, x2) => x1.Name.CompareTo(x2.Name));
}
catch (NullReferenceException R)
{
    throw R;
}
Run Code Online (Sandbox Code Playgroud)

然而,这是一行简单的代码,用于对我创建的对象数组进行排序;如果有空值,则抛出异常。该try catch块似乎不起作用。

异常发生在这个特定区域x1.Name.CompareTo(x2.Name),Catch 块是否放错了位置?

谢谢!

更新: 截取自以下评论的截图: 在此处输入图片说明

Kja*_*tan 5

不,看起来不错。但是,你正在重新抛出异常你抓了之后; Throw R意味着异常被传递到最初调用 try-catch 的代码块。

try
{
    Array.Sort(PokeArray, (x1, x2) => x1.Name.CompareTo(x2.Name));
}
catch (NullReferenceException R)
{
    // throw R; // Remove this, and your exception will be "swallowed". 

    // Your should do something else here to handle the error!
}
Run Code Online (Sandbox Code Playgroud)

更新

首先,将您的屏幕截图链接添加到原始帖子 - 它有助于澄清您的问题。:)

其次,您try-catch 确实会捕获异常 - 只是在您处于调试模式时不会。如果您继续在该行之后单步执行,您应该能够继续退出 try-catch 子句,并且您的程序应该继续。

如果您的异常没有被捕获,它就会终止程序。

PS:从 VS 的主菜单中选择DebugExceptions..,并确保您没有为任何列检查“抛出” - 如果这样做,您的程序将暂停并显示发生的任何异常,而不仅仅是“吞下”它们作为否则。

让我们重复一遍,只是为了绝对清楚:这个异常是可见的,因为代码在调试模式下运行并启用了异常查看。

如果相同的代码在生产模式下运行,则异常将被吞下,正如 OP 所期望的那样。