自定义集合实现IEnumerable

Pie*_* SS 8 c# ienumerable yield interface

我知道从技术上讲,一个接口用于读取而不是写入或编辑,但是,我想在下面的类中添加一个add和addrange函数,这是我目前所拥有的哪个不起作用

public class HrefCollection : IEnumerable<Href> 
{
    private IEnumerable<Href> hrefs;

    public IEnumerable<Href> Add( Href href )
    {
        yield return href;
    }

    public IEnumerable<Href> AddRange( List<Href> hrefs )
    {
        foreach( Href href in hrefs )
        {
            yield return href;
        }
    }

    public IEnumerator<Href> GetEnumerator()
    {
        return hrefs.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return hrefs.GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不太确定如何将收益率回报与私人清单联系起来.

谢谢你的帮助!

Luk*_*keH 5

IEnumerable<T>IEnumerable接口被用于产生一个只读顺序或提供一个集合中的项的一个只读视图.

如果您希望能够在集合中添加项目,那么在内部,您将需要使用允许添加项目的数据结构 - 例如List<T>.您根本无法使用IEnumerable<T>IEnumerable接口添加项目.

public class HrefCollection : IEnumerable<Href>
{
    private readonly List<Href> _hrefs = new List<Href>();

    public void Add(Href href)
    {
        _hrefs.Add(href);
    }

    public void AddRange(IEnumerable<Href> hrefs)
    {
        _hrefs.AddRange(hrefs);
    }

    public IEnumerator<Href> GetEnumerator()
    {
        return _hrefs.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable)_hrefs).GetEnumerator();
    }
}
Run Code Online (Sandbox Code Playgroud)