如何在C#中为接口实现IComparer

Tho*_*eld -1 c# icomparer

我有一个名为的接口IEmployee.我需要实现IComparer来实现我的接口.

这是我的代码,

interface IEmployee
  {

      String Name {get;set;}
      DateTime DOB {get;set;}
  }
Run Code Online (Sandbox Code Playgroud)

我为此创建了一个子类

class Employee
  {

      String Name {get;set;}
      DateTime DOB {get;set;}
  }
Run Code Online (Sandbox Code Playgroud)

现在我需要为此实现IComparer,并且在我的Main想要得到copmarer之类的

IComparer<IEmployee> comparerobject= // The comparer from the class.
Run Code Online (Sandbox Code Playgroud)

使用这个comparer我需要employee根据他们的名字对集合进行排序,比如

var employees = new IEmployee[]{new Employee("....."),....}
Array.Sort<IEmployee>(employees , comparer);
Run Code Online (Sandbox Code Playgroud)

Bry*_*anJ 8

你可以改为实现IComparable.然后你的代码看起来像:

interface IEmployee : IComparable
{
    String Name { get; set; }
    DateTime DOB { get; set; }
}

class Employee : IEmployee
{
    public string Name { get; set; }
    public DateTime DOB { get; set; }

    public int CompareTo(object obj)
    {
        return this.Name.CompareTo(((IEmployee)obj).Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以按如下方式对数组进行排序:

Array.Sort<IEmployee>(employees);
Run Code Online (Sandbox Code Playgroud)


Kei*_*las 5

你可以做

var sorted = employees.OrderBy(e => e.Name).ToArray();
Run Code Online (Sandbox Code Playgroud)

或与比较器

public class EmployeeComparer : IComparer<IEmployee>
    {
        public int Compare(IEmployee x, IEmployee y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后 Array.Sort(employees, new EmployeeComparer());

  • 给你一个比较器..... (2认同)