首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在排序时进行转换?

如何在排序时进行转换?
EN

Stack Overflow用户
提问于 2013-02-18 14:36:39
回答 6查看 146关注 0票数 0

我有类Vehicle类:Car继承自类:Vehicle,如下所示。我有一个列表,我想使用LINQ根据Car类(而不是vehicle父类)的属性进行排序。

代码语言:javascript
运行
复制
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进行排序。

我试过下面的一种,但不起作用。

代码语言:javascript
运行
复制
vehicleList.OrderBy(c => (Car)c.ModelName)

对怎么做有什么帮助吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-02-18 14:38:15

最易读的代码是

代码语言:javascript
运行
复制
vehicleList.Cast<Car>().OrderBy(c => c.ModelName);

当然,您也可以修复父母并编写相同的

代码语言:javascript
运行
复制
vehicleList.OrderBy(c => ((Car)c).ModelName);

尽管如此,如果您的列表中有任何不是Vehicle Car.的,则上述两种方法都会崩溃。如果这是不可能的,那为什么这不是一个List<Car>呢?

票数 3
EN

Stack Overflow用户

发布于 2013-02-18 14:39:18

你必须决定你想要什么:

Car实例列表或Vehicle实例列表。

如果您想要一个Vehicle实例的列表,就不能按Car的属性进行排序,因为在Vehicles列表中也可能有BusBicycle

执行当前尝试的操作(转换为Car)可能会在运行时引发异常。

话虽如此,如果你坚持这样做,你必须意识到两件事:

  1. 你需要修复你的演员阵容:vehicleList.OrderBy(c => ((Car)c).ModelName)
  2. 需要注意的是,OrderBy没有执行就地排序。vehicleList仍将保持原来的顺序。如果希望在vehicleList中获得有序的结果,则需要将OrderBy的结果分配给它: vehicleList = vehicleList.OrderBy(c => ((Car)c).ModelName).ToList();
票数 4
EN

Stack Overflow用户

发布于 2013-02-18 14:37:54

您必须将c转换为Car,而不是c.ModelName

试着:

代码语言:javascript
运行
复制
vehicleList.OrderBy(c => ((Car)c).ModelName)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14938738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档