[英]How to implement IEnumerable using a return call to IEnumerator? C#
我在代码中遇到了令人沮丧的错误,该错误不允许我为我创建的类实现IEnumerable。 让我发布代码,因为它总是更有意义,这里很短...
[Serializable]
internal class GroupNode : IGroupNode, IEnumerable<ISceneNode>
{
public string Name
{
get;
private set;
}
const int NumberOfChildren = 8;
#region Member variables
private IList<ISceneNode> children = new List<ISceneNode>(NumberOfChildren);
#endregion
public IEnumerator<ISceneNode> GetEnumerator()
{
return children.GetEnumerator(); //***
}
...
}
和界面:
public interface IGroupNode : ISceneNode, IEnumerable<ISceneNode>
{
void AddChild(ISceneNode child);
}
最后,错误消息(它实际上是描述性的):
Error 1 'Project.SceneGraphCore.GroupNode' does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'. 'Project.SceneGraphCore.GroupNode.GetEnumerator()' cannot implement 'System.Collections.IEnumerable.GetEnumerator()' because it does not have the matching return type of 'System.Collections.IEnumerator'. C:\Users\Ian\documents\visual studio 2012\Projects\ISceneGraph\SceneGraph\GroupNode.cs 11 20 SceneGraph
我刚才在这里做错了什么? 我所做的只是取走了基于列表的集合类,并返回列表的GetEnumerator方法。 但是然后,在错误消息中,这表示我尚未实现IEnumerable ...我以为返回GetEnumerator就足够了,但在这种情况下我无法确定。
IEnumerable<T>
继承自IEnumerable
(非通用版本)。 每当您实现通用方法时,您还需要提供非通用方法。
如果仅在Visual Studio中右键单击该界面,它将自动为您存入功能,但是您可以根据需要手动添加它。
IEnumerator IEnumerable.GetEnumerator()
{
return children.GetEnumerator();
}
除了现有方法外,只需将其添加到类中即可 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.