[英]Implement IEnumerable<T> For a List Wrapper
我有一個類,它只是一個列表的包裝,即,
public class Wrapper
{
public List<int> TList
{get;set;}
public Wrapper()
{
TList=new List<int>();
}
}
我想讓Wrapper
從IEnumerable繼承,以便我可以使用以下語法:
Wrapper wrapper = new Wrapper()
{
2,4,3,6
};
知道如何實現IEnumerable<T>
或IEnumerable
,以及如何定義方法體?
如果實現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();
}
}
(我也冒昧地將TList
setter TList
私有;通常建議集合類型屬性是只讀的,這樣集合就不能被類型之外的任何代碼替換。)
為了獲得集合初始化程序,您需要做兩件事:
獲得這些的最佳方法是實現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>();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.