在c#中使用. tolist (). foreach()时出现Null异常

本文关键字:Null 异常 foreach tolist | 更新日期: 2023-09-27 18:18:02

我正在使用htmllagilitypack来解析一些数据,并编写像下面这样的语句来删除不需要的内容-

doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove());

当HTML文档中存在<ul>元素时,此方法可以很好地工作。然而,如果没有<ul>元素,我得到一个值不能null异常时,将其转换为。tolist()。

我不想使用以下-

doc.DocumentNode.SelectNodes("//ul")== null ? null : doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove());

我有什么优雅的替代方案?

在c#中使用. tolist (). foreach()时出现Null异常

在您的示例中,您调用doc.DocumentNode.SelectNodes("//ul")两次。

怎么了?
var nodes = doc.DocumentNode.SelectNodes("//ul");
if(nodes != null)
   nodes.ToList().ForEach(a => a.Remove());

如果你有c# 6可用,你可以使用Null Conditional Operator:

doc.DocumentNode.SelectNodes("//ul")?.ToList().ForEach(a => a.Remove());

我会使用RemoveAll而不是ForEach(如果你可以使用c# 6):

doc.DocumentNode.SelectNodes("//ul")?.ToList().RemoveAll();

var nodes = doc.DocumentNode.SelectNodes("//ul");
if(nodes != null)
    nodes.ToList().RemoveAll();

您需要检查null条件

var docNodes = doc.DocumentNode.SelectNodes("//ul");
if(docNodes != null)
   docNodes .ToList().ForEach(a => a.Remove());