2013-03-22 96 views
0

我有一些基于IEnumerable<T>的自定义列表。现在我想重载构造函数,并用我得到的初始列表做一些自定义的东西。IEnumerable构造函数过载

//Constructor 
public CustomList(IEnumerable<T> collection) : base(collection) 
{ 
    //do some stuff with the collection e.g. iterate 
    foreach(T obj in collection) 
    { 
     //do some stuff with obj 
    } 
} 

它甚至有可能这样做吗?因为IEnumerable只能在base(collection)处枚举一次,但我猜,循环会失败。

编辑: ,因为它并不完全清楚给大家:我的基类是IEnumerable<T>IEnumerable只能在我的情况下,一旦枚举。

+1

你的基础课程是什么? – 2013-03-22 19:40:56

+1

你真的尝试过吗?我看到你在这里没有问题。我不知道是什么让你觉得'IEnumerable只能枚举一次'。 – 2013-03-22 19:42:48

+1

@MattBurland - 对于一些藏品来说也是如此。 – Oded 2013-03-22 19:43:24

回答

1

假设您的基类是List<T>,那么基础构造函数会将所有项添加到当前对象中。所以,你可以做到以下几点经常你想要的:

foreach (T obj in this) { } 

但我听说这是一个坏主意,List<T>继承,你应该实现IList<T>相反,哪怕是就在List<T>的包装。我只是不记得那是为什么。

+0

你是对的,与名单我会没有问题,因为它可以被枚举多次。但我有一个IEnumerable 这只能枚举一次在我的情况。 – CShark 2013-03-23 09:20:12

+1

@CShark我想你误解了这个答案。要么,要么我误解了你的评论。这个答案查看你的班级中的项目,而不是可枚举项目。它依赖于'base(collection)'构造函数使得这些项目可供以后使用,所以它只枚举'collection'一次。 – hvd 2013-03-23 09:28:40

+0

啊是的。我被名单激怒了。但是这个答案是完全正确的,并且有效。 – CShark 2013-03-23 09:55:27