实现IEnumerable <T>对于List Wrapper

Gra*_*ton 10 c# ienumerable

我有一个类,它只是一个列表的包装,即,

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>您将获得所需的功能.

更正:您实际上只需要在您的类中实现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();
    }
}
Run Code Online (Sandbox Code Playgroud)

(我也冒昧地将TListsetter设为私有;通常建议集合类型属性是只读的,这样集合就不能被类型之外的任何代码替换.)


ICR*_*ICR 9

为了获得集合初始化程序,您需要做两件事:

  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>();
    }
}
Run Code Online (Sandbox Code Playgroud)