2013-11-01 60 views
0

我在我的代码中遇到了令人沮丧的错误,它不允许我为创建的类实现IEnumerable。让我职位的代码,因为它总是会更有意义,这是在这里很短...如何使用IEnumerator的回调函数实现IEnumerable? C#

[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 

刚才我在这里做错了什么?我所做的只是取得我的集合类,它基于列表,并返回List的GetEnumerator方法。但是,然后,在错误消息中,它说我没有实现IEnumerable ...我认为返回GetEnumerator就足够了,但在这种情况下我不能说。

回答

3

IEnumerable<T>继承自IEnumerable(非通用版本)。任何时候你实现泛型方法,你也需要提供一个非泛型的对应。

如果您只需在Visual Studio中右键单击界面,它将自动为您排除功能,但如果您愿意,可以手动添加它。

IEnumerator IEnumerable.GetEnumerator() 
{ 
    return children.GetEnumerator(); 
} 

只需添加到类除了现有的方法