【问题标题】:skip ahead in a foreach loop c#在 foreach 循环中向前跳过 c#
【发布时间】:2014-11-19 15:10:02
【问题描述】:

如果我有一个 foreach 循环,它需要一大堆地址并遍历它们,有没有办法可以跳过前 500 个条目,

类似:

foreach(var row in addresses)
{
  string strAddr = row.ADDRESS + "," + row.CITY + "," + row.ST;
  System.Threading.Thread.Skip(500)
}

我知道 skip 不存在,但有什么我可以使用的东西可以做同样的事情吗?

【问题讨论】:

  • foreach(var row in addresses.Skip(500))一样使用Enumerable.Skip
  • 您想只跳过前 500 个条目还是每 500 个条目都跳过一次?
  • 注意:当您添加using System.Linq 时,.Skip(int value)IEnumerable<T> 上可用。
  • 只需要跳过前 500 个

标签: c# asp.net-mvc foreach


【解决方案1】:

您可以使用具有有意义名称的method

foreach(var row in addresses.Skip(500))
{
    // ...
}

您需要添加using System.Linq;,因为它是一种 LINQ 扩展方法。

如果addresses 的类型没有实现通用的IEnumerable<T> 接口,您可以使用Cast<T>。例如(假设类型为Address):

foreach(var row in addresses.Cast<Address>().Skip(500))
{
    // ...
}

【讨论】:

  • 但是,由于他使用的是foreach(var row,并且行显然不是object类型,我们可以假设地址实现了IEnumerable&lt;Address&gt;
【解决方案2】:

可以使用Skip扩展方法:

foreach(var row in addresses.Skip(500))
{
    string strAddr = row.ADDRESS + "," + row.CITY + "," + row.ST;
}

或者,如果addresses 只是一个数组或列表:

for (int i = 500 ; i < addresses.Count ; i++) // assuming addresses is a List<T>
{
    var row = addresses[i];
    string strAddr = row.ADDRESS + "," + row.CITY + "," + row.ST;
}

【讨论】:

    【解决方案3】:

    直接使用Enumerator接口:http://msdn.microsoft.com/en-us/library/system.collections.ienumerator(v=vs.110).aspx

    var enumerator = addresses.GetEnumerator();
    for (var i = 0; i < 300 && enumerator.MoveNext(); i++);
    

    【讨论】:

      【解决方案4】:

      一种可行且快速的解决方案是使用 LINQ Skip 方法从集合的第 500 个元素开始迭代集合的子集。

      foreach (var row in addresses.Skip(500))
      {
         // do your stuff...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多