如何使用IComparable比较复杂对象

时间:2018-04-09 00:29:07

标签: c#

假设我有一个带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); .
        }
    }

1 个答案:

答案 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
相关问题