实现IEnumerable <t>对于List Wrapper </t>

时间:2009-12-12 08:28:02

标签: c# ienumerable

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

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的界面,以及如何定义方法体?

2 个答案:

答案 0 :(得分: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();
    }
}

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

答案 1 :(得分:9)

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

  1. 实施IEnumerable
  2. 使用正确的签名
  3. 创建一个名为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>();
        }
    }