我有多个类型存储在一个列表中,我需要对它们进行排序,从最具体的类型到最一般的类型,例如:
Vehicle
Car
Bike
Person
Manager
Programmer
所以它列出了:车辆,汽车,自行车,人,经理,程序员类型。现在我需要得到有序列表,其中更具体的类型总是在更一般的类型之前,例如:Car, Bike, Vehicle, Manager, Programmer, Person。除了使用Type之外,是否有一些简单/优雅的方法来实现这一点?IsAssignableFrom ?
一种简单的方法是计算出每个子类在其层次结构中必须比其父类拥有更多的类,因此您可以根据每个类型的层次结构中有多少个类来排序:
var types = new[] {
typeof(Vehicle),
typeof(Car),
typeof(Bike),
typeof(Person),
typeof(Manager),
typeof(Programmer)
};
var ordered = types.OrderByDescending(t => GetHierarchy(t).Count());
使用这个:private static IEnumerable<Type> GetHierarchy(Type type)
{
while (type != null) {
yield return type;
type = type.BaseType;
}
}
class Vehicle {}
class Car : Vehicle{}
class Bike : Vehicle{}
class Person {}
class Manager : Person{}
class Programmer : Person{}
正如Adam和Jashaszun所说,您需要一个公共字段来设置类型类的优先级,因为Car和Bike在继承中都处于同一级别,您必须决定哪个具有最高的优先级。
在这种情况下,如果所有的类都在同一个集合中,并且这些类可以继承不同的根类型(vehicle或person)你可以定义一个接口ipriitysort与一个属性优先级整数,并设置值为每个不同的类(它可以是一个静态的,如果它是相同的所有对象的特定类型),并使用它来排序你的集合。
如果你能解释一下你将实现什么,以了解解决方案是否符合我们的想法,或者是否有其他的东西,那就太好了。