提问者:小点点

即使使用try{}catch{},仍然获得NullReferenceException


我有下面的代码:

foreach (var taskId in taskIdList)
{
    document = web.Load(path);
    try
    {
        nodes = document.DocumentNode.SelectNodes("//td")
            .Where(x => x.Attributes["title"].Value.Contains("Log.html")).ToArray();
    }
    catch (ArgumentNullException)
    {
        Console.WriteLine("ArgumentNullException in TaskId: " + taskId);
    }
    
    foreach (HtmlNode item in nodes)
    {
        try
        {
            downloadLinkList.Add(item.SelectSingleNode(".//a").Attributes["href"].Value);
        }
        catch(NullReferenceException)
        {
            Console.WriteLine("NullReferenceException in TaskId: " + taskId);
        }
    }
}

联机System.NullReferenceException:DownloadLinkList.Add(Item.SelectSingleNode(“.//a”).Attributes[“href”].Value);

怎样才能妥善处理,让它不再崩溃?我的印象是,它应该只是跳过前面。

使用break也不是一个选项,因为我仍然需要没有所需的href的某个页面的信息。


共1个答案

匿名用户

try/catch机制不会阻止异常发生。它将防止它传播/膨胀。

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

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

但IDE有可能中断执行以显示异常(取决于您的设置),但您只需单击“continue”(F5),它将继续运行到控制台。WriteLine