2013-11-01 98 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(); 
} 

只需添加到類除了現有的方法