2012-05-14 18 views
-2

我有自定義類,實現IEnumerable<int[]>接口和保存當前Enumerator。當添加新元素時,我需要將枚舉器設置爲最後一個元素。對於集枚舉最好的方法來設置IEnumerator結束

示例代碼來結束:

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

如何做到這一點得更快? (我能走到最後不能不滾動所有序列元素?)

+0

做_what_比_what_更快嗎? – Oded

+0

更快(在性能)?那是唯一的方法。 Reset,MoveNext是可用於迭代的唯一操作(當使用IEnumerable/IEnumerator時) – Tilak

+2

** IEnumerable **中有** Count **屬性嗎? :-O –

回答

1

如果更快裝置更少的代碼(另一種選擇是),

 IEnumerable<int> seq = ... 

     while (seq.MoveNext()) 
     { 
      var item = seq.Current; 
     } 

EDIT
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在一次迭代到最後因爲你永遠不知道在哪裏停下來。

+0

我需要seq.Current = seq.Last(); – Famos

+2

使用IEnumerator,這是不可能的。 – Tilak

-1

for語句將遍歷從xy,與預先定義的增量,像這樣:

for (`start`; `until`; `increment`) 

例如如果我們想從0循環到9,增量爲1,我們會寫

for (int i = 0; i < 10; i++) 

如果你有一個實現next型方法的對象,您可能需要使用一個while循環。我想推薦閱讀約loops in C#