Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HtmlAlityPack IEnumerable节点?_C#_Html Agility Pack - Fatal编程技术网

C# HtmlAlityPack IEnumerable节点?

C# HtmlAlityPack IEnumerable节点?,c#,html-agility-pack,C#,Html Agility Pack,我如何使这更好,因为这个代码工作,但是癌症 请让我明白 首先,我将该方法更改为接受IEnumerable而不是通用IEnumerable。这可能需要也可能不需要在调用端进行更改,但它会阻止您的方法被调用,例如,使用整数数组 然后,可以使用LINQsSkip和FirstOrDefault来摆脱循环。如果可枚举项没有包含足够的元素,则后者返回null string dadada(IEnumerable _elements) { int i = 0; string link = "nu

我如何使这更好,因为这个代码工作,但是癌症


请让我明白

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

然后,可以使用LINQs
Skip
FirstOrDefault
来摆脱循环。如果可枚举项没有包含足够的元素,则后者返回
null

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;
}
字符串数据(IEnumerable\u元素)
{
HtmlNode节点=_elements.Skip(1).FirstOrDefault();
return node==null?“null”:node.SelectSingleNode(“a”)。属性[0]。值;
}
将其更改为:

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

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

这是当i==2时!很抱歉这是当i==2时!对不起@安德鲁:只需在第一个默认值之前使用
Skip(1)
string dadada(IEnumerable _elements)
{
    string link = "null";

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

    return link;
}