C#跳过循环?

时间:2017-06-22 12:53:50

标签: c# list loops foreach

我有一个小问题。当我编译并运行此代码时,在foreach语句迭代之前调用WriteLine方法。当调用WriteLine时,这会导致System.ArgumentOutOfRangeException,因为foreach循环尚未设置该元素。我认为c#在代码中向下进行,并等待for和while循环完成,然后继续向下,就像在c ++中一样。有人可以向我解释这个并告诉我如何等到foreach循环再继续执行。

谢谢!

foreach (var row in rows)
{
    var items = row.ChildNodes.Where(y => y.Name.Equals("td"));
    List<string> entries = new List<string>();

    foreach (var item in items)
    {
         entries.Add(item.InnerText);
    }

    //This is executed before the foreach loop has iterated through all the items?
    Debug.WriteLine(entries.ElementAt(0));
}

2 个答案:

答案 0 :(得分:3)

  在foreach语句之前调用

...当WriteLine

时会导致System.ArgumentOutOfRangeException

不,这不会导致异常。如果在空集合上使用Enumerable.ElementAt,则会引发此异常。这也解释了为什么foreach循环被“跳过”。

  

ArgumentOutOfRangeException:index小于0或大于或   等于源中元素的数量。

顺便说一下,你可以简化代码:

var entries = row.ChildNodes
    .Where(item => item.Name.Equals("td"))
    .Select(item => item.InnerText)
    .ToList();

答案 1 :(得分:1)

这意味着

var items = row.ChildNodes.Where(y => y.Name.Equals("td"));

是空的。

foreach(项目中的var项目)执行但什么都不做。