C# 对不同类型的对象进行排序

C# 对不同类型的对象进行排序,c#,C#,我有3种具有相同基类的对象。制作具有相同基类的对象数组的最佳方法是什么? 我是否必须创建泛型类型并使用比较器来执行此操作,或者有一种方法可以使用某些arraylist类来代替 我需要按类型和字段对对象进行排序。 如下所示:coupe1、coupe2、sedan1、sedan2、sedan3、掀背车1等以及所有阵列元素的字段 class Program { abstract class Car { public string Name { get; set; }

我有3种具有相同基类的对象。制作具有相同基类的对象数组的最佳方法是什么? 我是否必须创建泛型类型并使用比较器来执行此操作,或者有一种方法可以使用某些arraylist类来代替

我需要按类型和字段对对象进行排序。 如下所示:coupe1、coupe2、sedan1、sedan2、sedan3、掀背车1等以及所有阵列元素的字段

class Program
{
    abstract class Car
    {
        public string Name { get; set; }
        public int Maxspeed { get; set; }                      
        public override string ToString() { return Name + " | " + Maxspeed.ToString();}
    }
    class Coupe : Car
    {
        public Coupe(string name, int maxspeed){ Name = name; Maxspeed = maxspeed;}
    }
    class Sedan : Car
    {
        public Sedan(string name, int maxspeed) { Name = name; Maxspeed = maxspeed;}
    }
    class Hatchback : Car
    {
        public Hatchback(string name, int maxspeed){  Name = name; Maxspeed = maxspeed;}
    }
    class Cars<T>:IComparer<T> where T:Car
    {
        private T[] cars;
        private int length;
        public int Length
        {
            get{ return length;}

        }
        public Cars(int i)
        {
            if (i > 0){ cars = new T[i]; length = i;}\
        }
        public T this[int i]
        {
            get {return cars[i];}
            set{cars[i] = value;}
        }



        public int Compare(T x, T y)
        {
            throw new NotImplementedException();
        }
    }

    static void Main(string[] args)
    {
        Coupe coupe1 = new Coupe("Audi R8", 250);
        Sedan sedan1 = new Sedan("Suzuki Ciaz", 180);
        Hatchback hatchback1 = new Hatchback("Hyundai Elantra", 170);
        Cars<Car> cars = new Cars<Car>(3);
        cars[0] = coupe1;
        cars[1] = sedan1;
        cars[2] = hatchback1;
        for (int i = 0; i < cars.Length; i++)
            Console.WriteLine(cars[i].Name + " " + cars[i].Maxspeed.ToString());

        Console.ReadKey();
    }
}
类程序
{
抽象类汽车
{
公共字符串名称{get;set;}
public int Maxspeed{get;set;}
公共重写字符串ToString(){return Name+“|”+Maxspeed.ToString();}
}
等级:轿车
{
公共轿跑车(字符串名称,int-maxspeed){name=name;maxspeed=maxspeed;}
}
类别轿车:轿车
{
公共轿车(字符串名称,int-maxspeed){name=name;maxspeed=maxspeed;}
}
二等舱:轿车
{
公共掀背车(字符串名称,int-maxspeed){name=name;maxspeed=maxspeed;}
}
类别汽车:I比较者,其中T:汽车
{
私家车;;
私有整数长度;
公共整数长度
{
获取{返回长度;}
}
公共汽车(国际一)
{
如果(i>0){cars=newt[i];length=i;}\
}
公共交通工具[int i]
{
获取{返回汽车[i];}
设置{cars[i]=value;}
}
公共整数比较(TX,TY)
{
抛出新的NotImplementedException();
}
}
静态void Main(字符串[]参数)
{
Coupe coupe1=新的Coupe(“奥迪R8”,250);
轿车1=新轿车(“铃木Ciaz”,180);
掀背式掀背车1=新型掀背车(“现代伊兰特”,170);
轿车=新车(3);
汽车[0]=双门轿车1;
汽车[1]=轿车1;
汽车[2]=掀背式1;
对于(int i=0;i
如果您刚刚有一个
列表
,您可以使用LINQ
OrderBy
先按类型排序,然后再按其他任何方式排序

Coupe coupe1 = new Coupe("Audi R8", 250);
Sedan sedan1 = new Sedan("Suzuki Ciaz", 180);
Hatchback hatchback1 = new Hatchback("Hyundai Elantra", 170);
List<Car> cars = new List<Car>(3);
cars.Add(coupe1);
cars.Add(sedan1);
cars.Add(hatchback1);
var orderedByTypeThenSpeedDescending = cars.OrderBy(x => x.GetType())
                                           .ThenByDescending(x => x.MaxSpeed);
Coupe coupe1=新的Coupe(“奥迪R8”,250);
轿车1=新轿车(“铃木Ciaz”,180);
掀背式掀背车1=新型掀背车(“现代伊兰特”,170);
列表车辆=新列表(3);
车辆。添加(轿厢1);
汽车。添加(轿车1);
汽车。添加(掀背式1);
var orderedByTypeThenSpeedDescending=cars.OrderBy(x=>x.GetType())
.然后下降(x=>x.MaxSpeed);

如果您刚刚有一个
列表
,您可以使用LINQ
OrderBy
先按类型排序,然后再按其他任何方式排序

Coupe coupe1 = new Coupe("Audi R8", 250);
Sedan sedan1 = new Sedan("Suzuki Ciaz", 180);
Hatchback hatchback1 = new Hatchback("Hyundai Elantra", 170);
List<Car> cars = new List<Car>(3);
cars.Add(coupe1);
cars.Add(sedan1);
cars.Add(hatchback1);
var orderedByTypeThenSpeedDescending = cars.OrderBy(x => x.GetType())
                                           .ThenByDescending(x => x.MaxSpeed);
Coupe coupe1=新的Coupe(“奥迪R8”,250);
轿车1=新轿车(“铃木Ciaz”,180);
掀背式掀背车1=新型掀背车(“现代伊兰特”,170);
列表车辆=新列表(3);
车辆。添加(轿厢1);
汽车。添加(轿车1);
汽车。添加(掀背式1);
var orderedByTypeThenSpeedDescending=cars.OrderBy(x=>x.GetType())
.然后下降(x=>x.MaxSpeed);

“创建具有相同基类的对象数组的最佳方法是什么?”-创建基类数组(
Car[]
)。您的具体类不会向基类添加任何内容。您不妨将它们都称为
Car
为什么需要创建所有这些子类?只需创建一些
enum CarType
和属性
公共CarType CarType{get;set;}
并使用它。每个类将具有不同的method@Rdd当然,我想是这样的。但是你意识到,一旦你把它们放在
Car
列表中,你就不知道哪个是哪个,因此也就无法调用这些特定的方法。继承层次结构并不总是解决问题的最佳方式。。。事实上,它们很少是这样。“用相同的基类创建对象数组的最佳方法是什么?”-创建基类数组(
Car[]
)。您的具体类不会向基类添加任何内容。您不妨将它们都称为
Car
为什么需要创建所有这些子类?只需创建一些
enum CarType
和属性
公共CarType CarType{get;set;}
并使用它。每个类将具有不同的method@Rdd当然,我想是这样的。但是你意识到,一旦你把它们放在
Car
列表中,你就不知道哪个是哪个,因此也就无法调用这些特定的方法。继承层次结构并不总是解决问题的最佳方式。。。事实上,他们很少这样做。