自定义集合实现IEnumerable

时间:2010-05-21 14:38:41

标签: c# interface ienumerable yield

我知道从技术上讲,一个接口用于读取而不是写入或编辑,但是,我想在下面的类中添加一个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();
    }
}

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

感谢您的帮助!

3 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:1)

foreach( Href href in hrefs )
{
    yield return href;
}

应该是

foreach( Href href in this.hrefs )
{
    yield return href;
}
foreach( Href href in hrefs )
{
    yield return href;
}

答案 2 :(得分:0)

public class HrefCollection<T> : ObservableCollection<T>, IEnumerable<T>  {


// access via this[index]
}
相关问题