我有自定义类来实现IEnumerable<int[]>
接口并保存当前Enumerator
。添加新元素时,我需要将枚举器设置为最后一个元素。
set enumerator结束的示例代码:
IEnumerable<int> seq = ...
seq.Reset();
for (int i = 0; i < seq.Count; i++)
{
seq.MoveNext();
}
这怎么做得更快? (我可以到最后不能滚动所有序列元素吗?)
答案 0 :(得分:1)
如果更快意味着更少的代码(另一种选择),
IEnumerable<int> seq = ...
while (seq.MoveNext())
{
var item = seq.Current;
}
修改强>
你想要seq.Last()
它是一种扩展方法,代码与上面类似。
EDIT2
我需要seq.Current = seq.Last();
您的代码与
类似 IEnumerable<int> seq = ...
int count=0;
//Following while is equivalent to seq.Count
while (seq.MoveNext())
{
count++;
}
int i=0;
while (i<count)
{
seq.MoveNext();
}
仅使用IEnumerator,无法在一次迭代中将seq.Current设置为Last,因为您永远不知道在哪里停止。
答案 1 :(得分:-1)
for
语句将从x
迭代到y
,具有预定义的增量,如下所示:
for (`start`; `until`; `increment`)
e.g。如果我们想要从0循环到9,增量为1,我们就会写
for (int i = 0; i < 10; i++)
如果您有一个实现next
类型方法的对象,则可能需要使用while
循环。
while (seq.CurrentItem != null)
{
// do something with the current item and move to next
seq.Next();
}
我建议您阅读loops in C#。