2016-03-06 71 views
0

我想列舉List的值在不同的方法(只發送迭代器作爲參數)。它運行良好,但令我驚訝的是,它在索引值退出方法後重置爲1。這裏有一個例子 - 你能向我解釋它是如何工作的以及如何解決它?枚舉器重置索引的值

太謝謝你了!

public void SaveHistory(string folder) 
{ 
    using (var iterator = Items.GetEnumerator()) 
    { 
     foreach (var file in _files) 
      if (!Proceed(Path.Combine(folder, file.Name), iterator)) //first call 
       break; 
      //AND HERE my iterator.Index value is 1 again. 
     while (Proceed(GetNewFileName(folder), iterator)) { } 
    } 
} 
private bool Proceed(string fileName, IEnumerator<HistoryItemBase> iterator) 
{ 
    var dose = new List<HistoryItemBase>(); 
    if (iterator.MoveNext()) 
    { 
     while (dose.Count < LogFileItemsCount && iterator.MoveNext()) 
      dose.Add(iterator.Current); 
     //DO Something 
    } 
    return false; //<- Here iterator.MoveNext() returns false and it's index value is ok 
} 
+4

[這是一個結構](http://stackoverflow.com/questions/3168311/why-do-bcl-collections-use-struct-enumerators-not-classes),[通過引用](http:///stackoverflow.com/questions/16614704/pass-c-sharp-struct-by-reference)或考慮一個不需要完全繞過枚舉器的不同設計。 – CodeCaster

+0

是的..只有在提出問題之後才明白..工作到晚上是個好主意:)但是非常感謝你的回答! –

回答

0

那麼,答案是很容易 - 在我的情況下,迭代器是一個結構和所有的結構交給由價值,而不是參考方法。而在我的情況下,我不能只增加一個參考字到參數,因爲我正在使用using語句。

謝謝!