我正在使用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());
我有哪些优雅的替代品?
答案 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());