Бэкдор для общих списков через IList

У меня есть сценарий, в котором класс загружает объекты одного типа из-за делать абстракции Я не могу использовать общий класс (дженерики имеют тенденцию распространяться, как рак :), но я часто хочу работать с общей версией объектов после извлечения, что привело к такому коду (упрощенному):

List<SomeClass> items = Storage.LoadItems(filename).OfType<SomeClass>().ToList();

Где LoadItems возвращает a List , тогда я понял, почему бы вместо этого не иметь

public void LoadItems(string filename,IList list);

Теперь я могу сделать это вместо

List<SomeClass> items = new  List<SomeClass>();
LoadItems(filename,items);

Что должно быть более эффективным. Это также кажется немного более гибким, поскольку я могу взять существующий список и заняться новыми элементами. Итак, мои вопросы: это обычная схема или у вас есть другой / лучший способ добиться этого?

Мне также немного любопытно, что вы можете это сделать, если вы попытаетесь добавить объект неправильного типа, вы получите исключение, но означает ли это, что общие списки также выполняют проверку типа? (что кажется немного ненужным)

ИЗМЕНИТЬ На самом деле было бы немного элегантнее изменить шаблон на

public IList LoadItems(string filename,IList list=null);

, чтобы вы могли свободно использовать оператор, и если список не передан, вы могли бы просто создать экземпляр List

8
задан Homde 12 November 2010 в 13:32
поделиться