C#,通用列表和继承

时间:2011-03-16 00:07:43

标签: c# list generics inheritance

我有一个名为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 个答案:

答案 0 :(得分:3)

使用.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 :(得分:1)

如果您可以更改保存功能以获取IEnumerable,那么您可以:

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