C #, общие списки и наследование - PullRequest
1 голос
/ 16 марта 2011

У меня есть класс с именем Foo, который определяет список объектов типа A:

class Foo {
    List<A> Items = new List<A>();
}

У меня есть класс с именем Bar, который может сохранять и загружать списки объектов типа B:

class Bar {
    void Save(List<B> ComplexItems);
    List<B> Load();
}

B является подклассом A. Foo, Bar, A и B находятся в библиотеке, и пользователь может создавать дочерние элементы любого из классов.

Я хотел бы сделать что-то вродеследующее:

Foo MyFoo = new Foo();
Bar MyBar = new Bar();

MyFoo.Items = MyBar.Load();
MyBar.Save(MyFoo.Items);

Очевидно, это не сработает.Есть ли умный способ сделать это, чтобы избежать создания промежуточных списков?

спасибо, Энди

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Используйте .NET 4.0 и IEnumerable<T> вместо List<T> (http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx),, в противном случае сделайте Save универсальным для T (тип элемента списка).

1 голос
/ 16 марта 2011

Если вы можете изменить функцию сохранения на IEnumerable, вы можете:

void Save(IEnumerable<B> ComplexItems);
Save(MyFoo.Items.Cast<B>());
...