假设我有一个带firstName和lastName的类。我想比较基于firstName的对象,所以我写了一个如下代码片段:
public class Customer : IComparable<Customer>
{
public string FName { get; set; }
public string LName { get; set; }
public int CompareTo(Customer other)
{
return this.FName.CompareTo(other.FName); .
}
}
主要
List<Customer> listCustomers = new List<Customer>();
listCustomers.Add(customer1);
listCustomers.Add(customer2);
listCustomers.Add(customer3);
listCustomers.Sort();
它工作正常但是假设某个地方我还需要根据姓氏进行比较。我可以在场景中做些什么。我的意思是我总是可以编写自己的自定义方法,但还有其他方法吗?就像我为FName做的那样,我也可以使用Icomparable
接口来实现基于LName的排序。
问题:我可以使用两个版本的CompareTo
我想要像
这样的东西public class Customer : IComparable<Customer>
{
public string FName { get; set; }
public string LName { get; set; }
public int CompareTo(Customer other)
{
return this.FName.CompareTo(other.FName); .
}
public int CompareTo(Customer other)
{
return this.LName.CompareTo(other.LName); .
}
}
答案 0 :(得分:1)
它工作正常但是假设某个地方我还需要根据姓氏进行比较。我可以在场景中做些什么。
在这种情况下,您可以使用the overloads of Sort
之一。这是an example,它以三种不同的方式进行比较。
public class Program
{
public static void Main()
{
var customers = new List<Customer>
{
new Customer("a", "c", "b"),
new Customer("b", "a", "c"),
new Customer("c", "b", "a"),
};
// A: uses Customer.CompareTo(...)
customers.Sort();
// B: uses a lambda
customers.Sort((x, y) => x.Last.CompareTo(y.Last));
// C: uses MiddleNameComparer.Compare(...)
customers.Sort(new MiddleNameComparer());
}
}
以下是实现Customer
的{{1}}类。
IComparable
以下是实现public class Customer : IComparable<Customer>
{
public string First { get; set; }
public string Middle { get; set; }
public string Last { get; set; }
public Customer(string first, string middle, string last)
{
First = first;
Middle = middle;
Last = last;
}
public int CompareTo(Customer p)
{
return this.First.CompareTo(p.First);
}
}
的{{1}}类。
MiddleNameComparer