簡體   English   中英

實現IEnumerable <T>對於List Wrapper

[英]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> ,則可以獲得所需的功能。

更正:您實際上只需要實現IEnumerableIEnumerable<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私有;通常建議集合類型屬性是只讀的,這樣集合就不能被類型之外的任何代碼替換。)

為了獲得集合初始化程序,您需要做兩件事:

  1. 實現IEnumerable
  2. 有一個名為Add的方法,帶有正確的簽名

獲得這些的最佳方法是實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM