所以我有一个继承列表的对象。
public class Foo: List<Bar>我想通过Bar上的属性BarDate对其进行重新排序
例如
Foo testFoo = GetFoo();
testFoo = testFoo.OrderBy(b => b.BarDate).ToList();但是testFoo的类型是Foo,而不是List,所以我怎么能进行造型呢?
谢谢
发布于 2011-06-15 19:39:55
你不能这么做。您正在设置对派生类的引用,这是它的基类的一个实例,这将不起作用。
引用testFoo只能是Foo或从Foo派生的对象(List<Bar>是Foo的基类)
但是,您可以这样做:
public class Foo : List<Bar>
{
public Foo()
{}
public Foo(IEnumerable<Bar> collection)
: base(collection)
{}
}在后面的代码中:
Foo testFoo = new Foo();
testFoo = new Foo(testFoo.OrderBy(b => b.BarDate));LINQ表达式将返回一个IEnumerable<Bar>,因此与List<T>的构造函数之一兼容
顺便说一下,编译器错误消息显示“存在显式转换(是否缺少强制转换?)”的原因。是因为如果你有一个对象,它是一个恰好被作为List<Bar>引用的Foo,那么你可以对它进行强制转换。例如:
Foo myFoo = new Foo();
List<Bar> myList = myFoo;
Foo sameFoo = (Foo)myList;所有三个引用(myFoo、myList和sameFoo)都引用完全相同的Foo实例,并且类型转换可以正常工作。但是,如果是这种情况:
List<Bar> actualList = new List<Bar>();
Foo listedFoo = (Foo)actualList;那么强制转换将失败,因为actualList不是Foo或Foo的派生。
发布于 2011-06-15 19:41:51
ToList()返回一个新的List<Bar>。没有办法取回Foo对象。这是您不应该从List继承的原因之一。
https://stackoverflow.com/questions/6356966
复制相似问题