我如何在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);
}
答案 0 :(得分:4)
我假设您正在询问如何扩展无法修改的现有类的功能(否则您可以直接编辑该类本身),如果是这种情况,我建议将扩展方法设置为例如:
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在类上的完成方式,因为比较的默认行为(按原样使用参数)很有用。我也不是说不要实现IComparable(而不是创建IComparer),如果它有意义并且您可以访问该类,然后使用IComparable,但这将不允许您更改继承的compare方法的参数。