使用.ToList()时的Null异常.C#中的ForEach()

时间:2015-10-16 09:23:58

标签: c# list

我正在使用HtmlAgilityPack解析一些数据并编写如下所示的语句来删除不需要的内容 -

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

当HTML文档中存在<ul>元素时,此方法很有效。但是,如果没有<ul>元素,则在将其转换为.ToList()时会得到值不能为空异常。

我不想使用以下内容 -

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

我有哪些优雅的替代品?

4 个答案:

答案 0 :(得分:6)

在您的示例中,您要拨打doc.DocumentNode.SelectNodes("//ul")两次。

有什么问题
var nodes = doc.DocumentNode.SelectNodes("//ul");
if(nodes != null)
   nodes.ToList().ForEach(a => a.Remove());

答案 1 :(得分:4)

如果您有C#6,可以使用Null Conditional Operator

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

答案 2 :(得分:2)

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

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

或者

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

答案 3 :(得分:1)

您需要检查null条件。

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