1

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

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'.
4

2 回答 2

3

children.GetEnumerator()在这种情况下,您可以简单地返回。(顺便说一下,您的 GroupNode 对象应该实现 IEnumerable 并且您的 GetEnumerator 方法应该具有正确的返回类型。)

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

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

于 2013-11-01T02:09:11.330 回答
2

由于 IList 已经实现IEnumerable<>,您可以children.GetEnumerator()在您的GetEnumerator()方法中返回。

于 2013-11-01T02:11:01.700 回答