gpt4 book ai didi

c# - 自定义集合实现 IEnumerable

转载 作者:太空狗 更新时间:2023-10-29 19:40:10 25 4
gpt4 key购买 nike

我知道从技术上讲,接口(interface)用于读取而不是写入或编辑但是,我想向下面的类添加一个添加和添加范围函数,这是我目前拥有的不起作用

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

我不太确定如何将 yield 返回与私有(private)列表相关联。

感谢您的帮助!

最佳答案

IEnumerable<T>IEnumerable接口(interface)用于生成只读序列或提供集合中项目的只读 View 。

如果您希望能够将项目添加到您的收藏中,那么在内部,您将需要使用允许添加项目的数据结构——例如 List<T> .您根本无法使用 IEnumerable<T> 添加项目或 IEnumerable接口(interface)。

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

关于c# - 自定义集合实现 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2883020/

25 4 0