如何向 CompareTo 方法添加另一个参数?



如何向 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,但这不允许你更改继承的比较方法的参数。

最新更新