我有类Vehicle和类:Car继承自类:Vehicle,如下所示。我有一个列表,我想使用LINQ根据Car类(而不是vehicle父类)的属性进行排序。
class vehicle
{
public String Name {get; set; }
}
class Car:Vehicle
{
public String ModelName {get; set; }
}
List<Vehicle> vehicleList=new List<Vehicle>();
Car c1 = new Car();
vechicleList.Add(c1); //s note that i am adding **Car** objects
Car c2 = new Car();
vechicleList.Add(c2);
// added 10 such Car objects然后,我想根据vehicleList (它是汽车的属性,而不是父类的属性)对CarModel进行排序。
我试过下面的一种,但不起作用。
vehicleList.OrderBy(c => (Car)c.ModelName)对怎么做有什么帮助吗?
发布于 2013-02-18 14:38:15
最易读的代码是
vehicleList.Cast<Car>().OrderBy(c => c.ModelName);当然,您也可以修复父母并编写相同的
vehicleList.OrderBy(c => ((Car)c).ModelName);尽管如此,如果您的列表中有任何不是Vehicle Car.的,则上述两种方法都会崩溃。如果这是不可能的,那为什么这不是一个List<Car>呢?
发布于 2013-02-18 14:39:18
你必须决定你想要什么:
Car实例列表或Vehicle实例列表。
如果您想要一个Vehicle实例的列表,就不能按Car的属性进行排序,因为在Vehicles列表中也可能有Bus或Bicycle。
执行当前尝试的操作(转换为Car)可能会在运行时引发异常。
话虽如此,如果你坚持这样做,你必须意识到两件事:
vehicleList.OrderBy(c => ((Car)c).ModelName)OrderBy没有执行就地排序。vehicleList仍将保持原来的顺序。如果希望在vehicleList中获得有序的结果,则需要将OrderBy的结果分配给它:
vehicleList = vehicleList.OrderBy(c => ((Car)c).ModelName).ToList();发布于 2013-02-18 14:37:54
您必须将c转换为Car,而不是c.ModelName。
试着:
vehicleList.OrderBy(c => ((Car)c).ModelName)https://stackoverflow.com/questions/14938738
复制相似问题