首页 > 解决方案 > 如何创建一种方法来对不同客户类型的一维数组进行排序?

问题描述

public void sortByType(){}  

如果我有三种支付方式不同的客户,我应该在这里输入什么
我有一个类客户继承了其他 3 个类,他们有一个名字、id、余额和书籍数组的名称以及手推车和归还的日期我如何按类型对它们进行排序?

class Book
{
    public string BName { get;set; }
    public string Day { get;set; }
    public string Month { get;set;} }
    public string Year { get;set;} }
    public override string ToString(){}
}

然后我创建了一个抽象类Customer

abstract class Customer
{
    protected string name;
    protected double balance;
    protected double ID_num;
    protected Book[] rental_books = new Book[3];
    public string Name { get { return name; } set { name = value; } }
    public double Balance { get { return balance; }  set { balance = value; } }
    public double ID_NUM { get { return ID_num; } set { ID_num = value; } }

    public override string ToString() {}
    public abstract void BarrowBook(string bn, string d, string m, string y);
    public abstract void ReturnBook(string bn, string d, string m, string y); 
    public abstract void AddToBalance(double sum); 
}

并将其继承到其他三个子类并将我需要的内容添加到每个方法中

class NormalCustomer : Customer{}

class MemberCustomer : Customer{}

class StudentCustomer : Customer{}

然后我创建了一个库类

class Library
{
    private Customer[] customers;
    private int MaxCust=0;
    private int count = 0;
    public Library(int MaxCust) { this.MaxCust = MaxCust; }  
    public void Add(Customer c) { customers[count++] = c; }
    public void ToString() {
    public void SortByBalance()
    {
        double hold;
        for (int i = 0; i < customers.Length - 1; i++)
            for (int k = 0; k < (customers.Length - 1) - i; k++)
            {
                if (customers[k].Balance > customers[k + 1].Balance)
                {
                    hold = customers[k].Balance;
                    customers[k].Balance = customers[k + 1].Balance;
                    customers[k + 1].Balance = hold; 
                }
            }
    }
}

所以我现在需要的是我上面提到的方法以及如何创建它

标签: c#

解决方案


让我们上你的课

public class Customer { ... }

public class NormalCustomer : Customer{}

public class MemberCustomer : Customer{}

public class StudentCustomer : Customer{}

提供一个以混合顺序包含所有子项的数组:

Customer [] array = new Customer[]
{
    new StudentCustomer(),
    new MemberCustomer(),
    new NormalCustomer(),
    new MemberCustomer(),
    new StudentCustomer(),
    new StudentCustomer(),
    new NormalCustomer(),       
};

您可以使用方法:OfType来提取各个类型:

var children_1 = array.OfType<NormalCustomer>();
var children_2 = array.OfType<MemberCustomer>();
var children_3 = array.OfType<StudentCustomer>();

现在您只需使用Concat方法将它们连接到一个集合中。它期望第二个集合包含相同类型的元素,因此您需要将其临时转换为父类型:

Customer [] sorted children_1.Cast<Customer>().Concat(children_2).Concat(children_3).ToArray();

推荐阅读