我有下面的代码:
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
的某个页面的信息。
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