I have a class, which is just a wrapper over a list, ie,
public class Wrapper
{
public List<int> TList
{get;set;}
public Wrapper()
{
TList=new List<int>();
}
}
I want to make Wrapper
inherits from IEnumerable so that I can use the following syntax:
Wrapper wrapper = new Wrapper()
{
2,4,3,6
};
Any idea how to which interface to implement IEnumerable<T>
, or IEnumerable
, and how to define the method body?
If you implement ICollection<int>
you get the desired functionality.
Correction: you actually only need to implement IEnumerable
or IEnumerable<T>
and have a public Add
method in your class:
public class Wrapper : IEnumerable<int>
{
public List<int> TList
{ get; private set; }
public Wrapper()
{
TList = new List<int>();
}
public void Add(int item)
{
TList.Add(item);
}
public IEnumerator<int> GetEnumerator()
{
return TList.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
(I also took the liberty of making the TList
setter private; it is usually recommended that collection type properties are read-only so that the collection as such can not be substituted by any code outside the type.)
In order to get collection initializers you need to do 2 things:
The preferable way to get these is to implement ICollection, but the minimum you need to do is:
public class Wrapper : IEnumerable<int>
{
public List<int> TList
{get;set;}
public IEnumerator<int> GetEnumerator()
{
return TList.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() // Explicitly implement the non-generic version.
{
return TList.GetEnumerator();
}
public void Add(int i)
{
TList.Add(i);
}
public Wrapper()
{
TList=new List<int>();
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.