C# 在C中使用.ToList().ForEach()时出现Null异常#

C# 在C中使用.ToList().ForEach()时出现Null异常#,c#,list,C#,List,我正在使用HtmlAgilityPack解析一些数据,并编写如下语句以删除不需要的内容- doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove()); 当HTML文档中存在元素时,这种方法非常有效。但是,如果没有元素,则在将其转换为.ToList()时,我会得到一个值不能为null异常 我不想使用以下内容- doc.DocumentNode.SelectNodes("//ul")== null ? null

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

doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove());
当HTML文档中存在
元素时,这种方法非常有效。但是,如果没有
元素,则在将其转换为.ToList()时,我会得到一个值不能为null异常

我不想使用以下内容-

doc.DocumentNode.SelectNodes("//ul")== null ? null : doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove());
我有哪些优雅的选择?

如果您有C#6可用,您可以使用:


doc.DocumentNode.SelectNodes(“//ul”)?.ToList().ForEach(a=>a.Remove())

在您的示例中,您将调用
doc.DocumentNode.SelectNodes(“//ul”)
两次。你怎么了

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

您需要检查
null
条件

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

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


您认为您提出的解决方案有什么不雅之处?(当然,除了它不会编译!——
ForEach
是无效的,另一边的
null
不会合并)@Jamiec,我知道它不会编译,只是想分享我不想写的方式。当在单个标签上使用时,这种方法是可以的,但是假设我有大约100个标签,我想删除它们。要编写的代码很多,我知道我可以将其转换为函数,但不能正确地为函数提供服务。真的建议在foreach中删除吗?@Thomas这是OP正在做的,而不是问题所在。@Marius,我想知道这是否可以用一条语句编写。请告知。它可以是C#6。但声明不应该是你的目标。你的目标应该是正确和简单的代码。我现在有了@Nitesh,还有更多的东西要做
doc.DocumentNode.SelectNodes("//ul")?.ToList().RemoveAll();
var nodes = doc.DocumentNode.SelectNodes("//ul");
if(nodes != null)
    nodes.ToList().RemoveAll();