为集合类实现IEnumerable?

时间:2013-11-01 02:04:43

标签: c# foreach enumerable enumerator

我想理解这个主题,而不仅仅是能够抛弃语法。我有一个名为IGroupNode的集合类,它最多可以容纳8个子ISceneNodes。

internal class GroupNode : IGroupNode
{
    public string Name
    {
        get;
        private set;
    }

    const int NumberOfChildren = 8;
    #region Member variables
    private IList<ISceneNode> children = new List<ISceneNode>(NumberOfChildren);
    #endregion

    public IEnumerable<ISceneNode> GetEnumerator()
    {
        //?
    }

正如您可能知道的那样,它是一个基于列表的非常简单的集合类。我怎样才能在这里实现IEnumerable简单地返回 内部容器的枚举器?在这个非常简单的案例中,我不确定如何做到这一点。

现在我遇到了这个问题的麻烦:

'Weber.SceneGraphCore.GroupNode' does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'. 'Weber.SceneGraphCore.GroupNode.GetEnumerator()' cannot implement 'System.Collections.IEnumerable.GetEnumerator()' because it does not have the matching return type of 'System.Collections.IEnumerator'.

2 个答案:

答案 0 :(得分:3)

在这种情况下,您只需返回children.GetEnumerator()即可。 (顺便说一句,你的GroupNode对象应该实现IEnumerable,你的GetEnumerator方法应该有正确的返回类型。)

public IEnumerator<ISceneNode> GetEnumerator()
{
    return children.GetEnumerator()
}

在更一般的情况下,您可以迭代某些内容并为每个元素调用yield return

答案 1 :(得分:2)

由于IList已经实现IEnumerable<>,您只需在children.GetEnumerator()方法中返回GetEnumerator()