簡體   English   中英

如何使用對IEnumerator的返回調用來實現IEnumerable? C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM