设置IEnumerator结束的最佳方法

时间:2012-05-14 11:11:34

标签: c# performance

我有自定义类来实现IEnumerable<int[]>接口并保存当前Enumerator。添加新元素时,我需要将枚举器设置为最后一个元素。

set enumerator结束的示例代码:

IEnumerable<int> seq = ...
seq.Reset();
for (int i = 0; i < seq.Count; i++)
{
  seq.MoveNext();    
}

这怎么做得更快? (我可以到最后不能滚动所有序列元素吗?)

2 个答案:

答案 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#