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]
}
精彩评论