我有一个类,它只是一个列表的包装,即,
public class Wrapper
{
public List<int> TList
{get;set;}
public Wrapper()
{
TList=new List<int>();
}
}
Run Code Online (Sandbox Code Playgroud)
我想Wrapper从IEnumerable继承,以便我可以使用以下语法:
Wrapper wrapper = new Wrapper()
{
2,4,3,6
};
Run Code Online (Sandbox Code Playgroud)
知道如何实现哪个接口IEnumerable<T>,或者IEnumerable如何定义方法体?
Fre*_*örk 33
如果您实现,ICollection<int>您将获得所需的功能.
更正:您实际上只需要在您的类中实现IEnumerable或IEnumerable<T>拥有一个公共Add方法:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
(我也冒昧地将TListsetter设为私有;通常建议集合类型属性是只读的,这样集合就不能被类型之外的任何代码替换.)
为了获得集合初始化程序,您需要做两件事:
获得这些的最佳方法是实现ICollection,但您需要做的最小事情是:
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>();
}
}
Run Code Online (Sandbox Code Playgroud)