c# - 如何创建一种方法来对不同客户类型的一维数组进行排序?
问题描述
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;
}
}
}
}
所以我现在需要的是我上面提到的方法以及如何创建它
解决方案
让我们上你的课
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();
推荐阅读
- javascript - 无限滚动的“警告:遇到两个使用相同键的孩子”
- c++ - C++ 中的子弹物理运动动态刚体精度
- javascript - VSCode 动态导入的节点模块 JS 文件类型在 JS 中推断而不是 TS
- laravel - 随机 [access_compat:error] AH01797:客户端被 apache 的 error.log 文件中的服务器配置错误拒绝
- quill - 羽毛笔 JS | 实现多页面功能
- google-sheets - 如何将查询/过滤公式转换为数组公式?
- android - 关于如何用 JobIntentService 替换 IntentService 的 CSV 导出示例
- rate - 如何获得普拉特的出水率?
- python-3.x - 图像未从表单发布请求在 django 中更新
- arrays - 有没有办法在postgresql的“值数组”中查询带有某些条件的jsonb列?