2013-03-22 2 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), но цикл, похоже, не удастся.

EDIT: , так как это не совсем понятно для всех: Мой базовый класс IEnumerable<T> и IEnumerable могут быть перечислены только один раз в моем случае.

+1

Какой у вас базовый класс? –

+1

Вы действительно пробовали? Я не вижу проблем с тем, что у вас здесь. Я не знаю, что заставляет вас думать, что «IEnumerable может быть перечислим только один раз». –

+1

@MattBurland - Это верно для некоторых коллекций. – Oded

ответ

1

Предполагая, что ваш базовый класс равен List<T>, базовый конструктор добавляет все элементы к текущему объекту. Таким образом, вы можете сделать следующее, как часто, как вы хотите:

foreach (T obj in this) { } 

Но я слышал, что это плохая идея, чтобы наследовать от List<T>, что вы должны реализовать IList<T> вместо этого, даже если это всего лишь обертка вокруг List<T>. Я просто не могу вспомнить, почему это так.

+0

Вы правы, со списком У меня не было бы проблем, потому что это можно перечислить несколько раз. Но у меня есть IEnumerable , который может быть указан только один раз в моем случае. – CShark

+1

@CShark Я думаю, что вы неправильно поняли этот ответ. Либо это, либо я неправильно прочитал ваш комментарий. В этом ответе рассматриваются элементы вашего класса, а не элементы в перечисляемом. Он опирается на конструктор 'base (collection)', делающий элементы доступными для последующего использования, поэтому он перечисляет 'collection' только один раз. – hvd

+0

Ах да. Я был раздражен списком . Но этот ответ совершенно прав и работает. – CShark

Смежные вопросы