在 foreach 循环 C# 中向前跳过

本文关键字:foreach 循环 | 更新日期: 2023-09-27 18:31:14

如果我有一个 foreach 循环,它接受一大堆地址并通过它们循环,有没有办法跳过前 500 个条目,

像这样:

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

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

在 foreach 循环 C# 中向前跳过

可以使用具有有意义名称的方法:

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))
{
    // ...
}

您可以使用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;
}

直接使用 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++);

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

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