我有一个名为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);
显然这不起作用。是否有一种聪明的方法可以避免创建中间列表?
谢谢,安迪答案 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>());