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