即使我使用 try{}catch{} 仍然得到 NullReferenceException

Still getting NullReferenceException even if I use try{}catch{}

提问人: 提问时间:3/8/2021 更新时间:3/25/2021 访问量:1237

问:

我有以下代码:

----

System.NullReferenceException 在线: downloadLinkList.Add(item.选择SingleNode(“.//a”)。Attributes[“href”].值);

我怎样才能正确处理它并使其不再崩溃?我的印象是它应该跳过前面。

使用也不是一种选择,因为我仍然想要不需要的某个页面的信息。breakhref

C# 异常 NullReferenceException

评论

1赞 Luuk 3/8/2021
你是否在 Visual Studio 中执行此操作,同时对代码进行扩充?然后,请参阅如何在 Visual Studio 中调试时强制异常?在 Visual Studio 中使用调试器管理异常
1赞 JHBonarius 3/8/2021
让我猜猜,你在调试模式下运行。是的,那么您将看到所有例外情况。如果按继续,它将在捕获中处理。注意:请勿将异常用于正常情况处理。它们被称为“例外”是有原因的。如果 null 引用经常发生,则实现 null 检查和条件执行
0赞 Charlieface 3/9/2021
NullReferenceException != ArgumentNullException虽然原因通常是相同的
0赞 3/9/2021
@Charlieface我的帖子显然不是关于代码的那部分......
0赞 3/9/2021
@JHBonarius是的,非常感谢您的小费!而且,事实上,我是在调试模式下运行的,并且设置了异常设置,以便在发生异常时中断。

答:

2赞 Arcord 3/8/2021 #1

Try/Catch机制不会阻止异常的发生。它将阻止它传播/冒泡。

 try
 {
    downloadLinkList.Add(item.SelectSingleNode(".//a").Attributes["href"].Value);
 }
 catch(NullReferenceException)
 {
    Console.WriteLine("NullReferenceException in TaskId: " + taskId);
 }
 Console.WriteLine("Hello");

如果没有该机制,则永远不会打印“Hello”,因为异常中断了正常的代码流。通过捕获异常,您可以对异常执行某些操作,并且代码的其余部分可以继续。try/catch

但是,您的 IDE 可能会中断执行以显示异常(取决于您的设置),但您只需单击“继续”(F5),它将继续到Console.WriteLine

评论

0赞 3/8/2021
是的。我只是想,如果在现实世界中实现,它会弹出并崩溃。我现在才意识到我的异常设置设置为“发生这种情况时中断”,所以可能这就是原因。我的错是没有注意到它在按 F5 后仍然运行。尽管如此,还是谢谢你!