Я пытаюсь перечислить значения List в разных методах (просто для отправки итератора в качестве аргумента). Он работает хорошо, но, к моему удивлению, значение индекса сбрасывается до 1 после выхода из метода. Вот пример - можете ли вы объяснить мне, как это работает и как его решить?Enumerators reset значение индекса
Большое вам спасибо!
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
}
[Это структура] (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
Yep .. понимаете это только после того, как задаете вопрос. Плохая идея работать до ночи :) Но большое вам спасибо за ваш ответ! –