在C#中是否可以在特定索引处启动迭代器?

时间:2015-10-17 23:08:51

标签: c# data-structures

我有string s

的箭头
string [] cargs

我希望从k索引开始迭代它。是否有替代

 var iter = cargs.GetEnumerator();
 for (int i = 0; i <= k; ++i) iter.MoveNext();

???

此外,我正在尝试找出上述代码段中的iter类型。当我在Visual Studio中将鼠标悬停在它上面时,我被告知类型为System.Collections.IEnumerator,但我将行更改为

IEnumerator iter = cargs.GetEnumerator(); 

VS告诉我Using the generic System.Collections.Generic.IEnumerator<T> requires 1 type arguments。我接着试过了

IEnumerator<string> iter = cargs.GetEnumerator();

IEnumerator<string[]> iter = cargs.GetEnumerator();

那么...... cargs.GetEnumerator()是什么类型的,真的吗?

2 个答案:

答案 0 :(得分:9)

除非您编写的自定义枚举方法可以通过手动迭代实现,否则不要手动迭代。

首选[{3}}或现有的枚举方法(例如foreach)。

您可以使用阵列上的LINQ扩展方法(或任何其他IEnumerable<T>)从任何索引开始,但在某些序列中,术语 index 不适用)。

每个Skip(int)都有GetEnumerator()方法,返回IEnumerable<T>

但是,每个IEnumerable<T>也是(非通用)IEnumerator<T>,其GetEnumerator()方法返回(非通用)IEnumerable

首选通用接口,因为非泛型接口主要是遗留接口(从类型系统不支持泛型类型的早期版本开始)。

答案 1 :(得分:0)

仅供参考

bootstrap-responsive.css