HTMLAGILITYPACK IEnumerable节点?

时间:2015-03-01 20:33:11

标签: c# html-agility-pack

string dadada(IEnumerable _elements)
{
    int i = 0;
    string link = "null";

    foreach (HtmlNode node in _elements)
    {
        i++;

        if (i == 2)
        {
            link = node.SelectSingleNode("a").Attributes[0].Value;
        }
    }

    return link;
}

我如何做得更好,因为这段代码有效,但是癌症!

请让我理解!

2 个答案:

答案 0 :(得分:1)

首先,我将方法更改为接受IEnumerable<HtmlNode>而不是通用的IEnumerable。这可能需要也可能不需要在调用端进行更改,但它会阻止调用您的方法,例如,使用整数数组。

然后,您可以使用LINQ SkipFirstOrDefault来摆脱循环。如果可枚举的元素不足,则后者返回null

string dadada(IEnumerable<HtmlNode> _elements)
{
    HtmlNode node = _elements.Skip(1).FirstOrDefault();

    return node == null ? "null" : node.SelectSingleNode("a").Attributes[0].Value;
}

答案 1 :(得分:0)

将其更改为:

string dadada(IEnumerable _elements)
{
    string link = "null";

    if(_elements.Count() > 1)
    {
        link = ((HtmlNode)_elements.Skip(1).First()).SelectSingleNode("a").Attributes[0].Value;
    }

    return link;
}