我知道从技术上讲,一个接口用于读取而不是写入或编辑,但是,我想在下面的类中添加一个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();
}
}
我不太确定如何将收益率回报与私人清单联系起来。
感谢您的帮助!
答案 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]
}