C# 为集合类实现IEnumerable?
我想理解这个主题,而不仅仅是能够理解语法。我有一个名为IGroupNode的集合类,它最多可以容纳8个子节点C# 为集合类实现IEnumerable?,c#,foreach,enumerable,enumerator,C#,Foreach,Enumerable,Enumerator,我想理解这个主题,而不仅仅是能够理解语法。我有一个名为IGroupNode的集合类,它最多可以容纳8个子节点 internal class GroupNode : IGroupNode { public string Name { get; private set; } const int NumberOfChildren = 8; #region Member variables private IList<
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()
{
//?
}
在本例中,您只需返回
子类。GetEnumerator()
。(顺便说一下,GroupNode对象应该实现IEnumerable,GetEnumerator方法应该具有正确的返回类型。)
public IEnumerator GetEnumerator()
{
返回子项。GetEnumerator()
}
但在更一般的情况下,您可以对某些内容进行迭代,并为每个元素调用
产生返回值。在这种情况下,您只需返回子元素。GetEnumerator()
。(顺便说一下,GroupNode对象应该实现IEnumerable,GetEnumerator方法应该具有正确的返回类型。)
public IEnumerator GetEnumerator()
{
返回子项。GetEnumerator()
}
在更一般的情况下,尽管您可以对某些内容进行迭代,并为每个元素调用产生返回值
。因为IList已经实现了IEnumerable
,您可以在getEnumerable()
方法中返回children.GetEnumerator()
。因为IList已经实现了IEnumerable
,您只需在GetEnumerator()
方法中返回children.GetEnumerator()
。无法将IEnumerable隐式定义为IEnumeratord您是否将GetEnumerator的返回类型修复为IEnumerator?否,但这是如何工作的。所以,类实现了IEnumerable,但在实际实现中,我实现了IEnumerator?你是对的,我只是希望IEnumerable现在能完全实现。我将尝试继续,看看我是否遇到任何问题(感谢上帝的智能感知)“在实际实现中我实现了IEnumerator”这是不准确的。阅读接口IEnumerable的文档。注意方法上的返回类型。当然,接口A可以有一个返回类型为B的对象的方法。不能隐式地将IEnumerable定义为IEnumeratorId。您是否将GetEnumerator的返回类型修复为IEnumerator?不,但这是如何工作的。所以,类实现了IEnumerable,但在实际实现中,我实现了IEnumerator?你是对的,我只是希望IEnumerable现在能完全实现。我将尝试继续,看看我是否遇到任何问题(感谢上帝的智能感知)“在实际实现中我实现了IEnumerator”这是不准确的。阅读接口IEnumerable的文档。注意方法上的返回类型。当然,接口A可以有一个返回类型B的对象的方法。
'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'.
public IEnumerator<ISceneNode> GetEnumerator()
{
return children.GetEnumerator()
}