我想理解这个主题,而不仅仅是能够抛弃语法。我有一个名为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'.
答案 0 :(得分:3)
在这种情况下,您只需返回children.GetEnumerator()
即可。 (顺便说一句,你的GroupNode对象应该实现IEnumerable,你的GetEnumerator方法应该有正确的返回类型。)
public IEnumerator<ISceneNode> GetEnumerator()
{
return children.GetEnumerator()
}
在更一般的情况下,您可以迭代某些内容并为每个元素调用yield return
。
答案 1 :(得分:2)
由于IList已经实现IEnumerable<>
,您只需在children.GetEnumerator()
方法中返回GetEnumerator()
。