如何向 CompareTo 方法添加另一个参数,以便实现一个 switch 语句以允许我的程序选择 CompareTo 方法将要比较的内容?
当前我正在做:
public int CompareTo(Employee other)
{
return name.CompareTo(other.name);
}
我想做什么:
public int CompareTo(Employee other, string choice)
{
switch(choice)
{
case "name":
return name.CompareTo(other.name);
case "number"
return number.CompareTo(other.number);
}
return name.CompareTo(other.name);
}
我假设你在问如何扩展无法修改的现有类的功能(否则你可以直接编辑类本身(,如果是这种情况,我建议制作一个扩展方法如下:
public static class EmployeeExtensions {
public static int CompareTo(this Employee baseEmployee, Employee other, string choice){
... code ....
return 0;
}
}
然后,这将允许您扩展比较功能,并在需要时从任何需要它的地方调用它。您需要将扩展方法放在其自己的静态类中。
你可以通过以下方式调用它:
Employee a = new Employee(...);
Employee b = new Employee(...);
a.CompareTo(b, "args");
假设扩展类已导入到您尝试使用它的位置。这通常是 C# 允许扩展您无权访问的类的功能的方式。虽然如果你确实可以访问该类,我建议编辑类本身并创建一个新方法(你可以覆盖,但如果它们提供不同的功能,你需要编写两个方法,在这种情况下代码复制是可以的(。
如果您实际上尝试更改默认相等成员,则这不适用,如果是这种情况,则无法添加自己的参数并使其仍适用于现有基础结构(例如列表排序(,因此,如果您"想要向等于添加参数",我建议您重新评估您的问题。
如果您尝试更改对象比较的方式(实现 IComparable 的对象(,请创建自己的 IComparer,并使用它来进行比较,请不要尝试更改 CompareTo 在类上完成的方式,因为 Compare 的默认行为(按原样使用参数(很有用。我也不是说不要实现 IComparable(而不是制作一个 IComparer(,如果它有意义并且您可以访问该类然后使用 IComparable,但这不允许你更改继承的比较方法的参数。