实现 IEnumerable 的自定义集合

发布于 2024-09-02 06:09:59 字数 752 浏览 9 评论 0原文

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

我不太确定如何将收益回报与私有列表关联起来。

感谢您的帮助!

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 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!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烟凡古楼 2024-09-09 06:09:59

IEnumerableIEnumerable 接口用于生成只读序列或提供集合中项目的只读视图。

如果您希望能够向集合添加项目,那么在内部,您需要使用允许添加项目的数据结构 - 例如 List。您根本无法使用 IEnumerableIEnumerable 接口添加项目。

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

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();
    }
}
一笔一画续写前缘 2024-09-09 06:09:59
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;
}
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;
}
梦回梦里 2024-09-09 06:09:59
public class HrefCollection<T> : ObservableCollection<T>, IEnumerable<T>  {


// access via this[index]
}
public class HrefCollection<T> : ObservableCollection<T>, IEnumerable<T>  {


// access via this[index]
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文