在'this'C#上为'foreach'实现GetEnumerator

时间:2015-06-26 18:17:19

标签: c# arrays ienumerable enumerator

我有一个实现了索引器的类。 我希望能够在 this 上运行foreach循环,但它说我必须实现Enumerator接口。这让我实现了两种方法:

    #region IEnumerable implementation

    public IEnumerator<Type> GetEnumerator() {
        throw new NotImplementedException();
    }

    #endregion

    #region IEnumerable implementation

    IEnumerator IEnumerable.GetEnumerator() {
        throw new NotImplementedException();
    }

    #endregion
  1. 请您举例说明这两者之间有什么区别?
  2. 它需要什么样的实施?
  3. 这个类以这种方式构建:

    1. 它有一个字段,用于保存数据。
    2. 它有一个索引器来获取和设置上述数组中的特定元素。
    3. 我希望能够在类中的 this 上运行foreach循环,这样我就可以使用索引器的get和set逻辑来设置数组字段

      这就是为什么我需要实现GetEnumerator方法,但我不知道那里需要什么样的实现。

      感谢您的帮助。

      注意: How do I implement IEnumerable<T>线程没有帮助我,我已经读过了。唯一的实现是返回数组的枚举器。

1 个答案:

答案 0 :(得分:2)

这是实现IEnumerable的一个非常简单的例子:

public class SomeEnumerable : IEnumerable<string>
{
    private string[] values = new string[] { "foo", "bar" };

    #region Enumerator

    private IEnumerable<string> GetValues()
    {
        foreach(var s in values)
        {
            yield return s;
        }
    }

    #endregion Enumerator

    #region IEnumerable implementation

    public IEnumerator<string> GetEnumerator() {
        return GetValues().GetEnumerator();
    }

    #endregion

    #region IEnumerable implementation

    IEnumerator IEnumerable.GetEnumerator() {
        return GetEnumerator();
    }

    #endregion
}

如果你正在做一些不寻常的事情,只需用你需要的东西替换GetValues()里面的逻辑。