【问题标题】:Enumerators reset index's value枚举器重置索引的值
【发布时间】:2016-06-20 09:12:22
【问题描述】:

我正在尝试以不同的方法枚举 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
}

【问题讨论】:

  • It's a struct, pass it by reference 或考虑一种不需要完全传递枚举器的不同设计。
  • 是的..只有问了一个问题才明白..工作到晚上是个坏主意:)但是非常感谢您的回答!

标签: c# list ienumerator


【解决方案1】:

嗯,答案很简单——在我的例子中,迭代器是一个结构体,所有结构体都按值传递给方法,而不是引用。在我的例子中,我不能只在参数中添加一个 ref 字,因为我正在使用 using- 语句。

谢谢!

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2011-11-20
    • 2011-11-14
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    相关资源
    最近更新 更多