开发者

Custom Collection Implementing IEnumerable

I know that technically, an Interface is used for reading and not writting or editing however, I want to add an add and addrange function to the following class, here is what I currently have which is 开发者_StackOverflow社区not working

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();
    }
}

I'm not quite sure how to associate the yield return with the private list.

Thanks for your help!


The IEnumerable<T> and IEnumerable interfaces are used to generate a read-only sequence or provide a read-only view of the items in a collection.

If you want to be able to add items to your collection then, internally, you'll need to use a data structure that allows items to be added -- for example List<T>. You simply can't add items using the IEnumerable<T> or IEnumerable interfaces.

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();
    }
}


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

should be

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


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


// access via this[index]
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜