在C#中是否可以在特定索引处启动迭代器?
我有一个在C#中是否可以在特定索引处启动迭代器?,c#,data-structures,C#,Data Structures,我有一个strings的箭头 string [] cargs 我想从kth索引开始迭代它。有没有替代的方法 var iter = cargs.GetEnumerator(); for (int i = 0; i <= k; ++i) iter.MoveNext(); VS告诉我使用泛型System.Collections.generic.IEnumerator需要1个类型参数。我试过了 IEnumerator<string> iter = cargs.GetEnumer
string
s的箭头
string [] cargs
我想从k
th索引开始迭代它。有没有替代的方法
var iter = cargs.GetEnumerator();
for (int i = 0; i <= k; ++i) iter.MoveNext();
VS告诉我使用泛型System.Collections.generic.IEnumerator需要1个类型参数。我试过了
IEnumerator<string> iter = cargs.GetEnumerator();
IEnumerator iter=cargs.GetEnumerator();
及
IEnumerator iter=cargs.GetEnumerator();
所以。。。什么类型是cargs.GetEnumerator()
,真的吗?不要手动迭代,除非您正在编写一个自定义枚举方法,该方法将受益于使用手动迭代实现
首选或现有的枚举方法(如)
您可以使用数组上的扩展方法从任何索引开始(或任何其他
IEnumerable
,尽管在某些序列中术语索引不适用)
每个都有一个
GetEnumerator()
方法,该方法返回一个
但是,每个IEnumerable
也是一个(非泛型),它有一个GetEnumerator()
方法返回一个(非泛型)
首选泛型接口,因为非泛型接口主要是遗留的(从早期版本开始,当时类型系统不支持泛型类型)。仅供参考
//This starts at 0
var k = 31;
var startAT = 0;
for (int i= startAT; i<= k; ++i)
{
Console.WriteLine(i);
}
-------------------------------
//here the start position is changed, you can change to what you like!
//this starts at 30 instead of 0
var k = 31;
var startAT = 30;
for (int i= startAT; i<= k; ++i)
{
Console.WriteLine(i);
}
//这从0开始
var k=31;
var startAT=0;
对于(int i=startAT;iLSO,单击GetEnumerator
code并按F12,它将跳转到System.Collections.IEnumerator
,简短的回答是“否”。IEnumerator
/IEnumerator
界面不提供跳过值的方法。必须使用类似于.skip(5)的方法
提供跳过值的错觉。
IEnumerator<string[]> iter = cargs.GetEnumerator();
//This starts at 0
var k = 31;
var startAT = 0;
for (int i= startAT; i<= k; ++i)
{
Console.WriteLine(i);
}
-------------------------------
//here the start position is changed, you can change to what you like!
//this starts at 30 instead of 0
var k = 31;
var startAT = 30;
for (int i= startAT; i<= k; ++i)
{
Console.WriteLine(i);
}