【发布时间】:2015-01-08 05:17:48
【问题描述】:
我正在尝试实现此链接的相同示例,但更关注受抚养孩子的数量。
http://www.codeproject.com/Articles/42839/Sorting-Lists-using-IComparable-and-IComparer-Inte
所以我有 3 名员工,分别是 A:0、B:0、C:2。我想按孩子的数量顺序排列它们。所以我会有 C:2, B:0, A:0
但是我的列表没有被排序。它仍然是 A: 0, B: 0, C: 2
我做错了什么?
我的比较器
public class EmployeeComparer : IComparer<Employee>
{
public int Compare(Employee x, Employee y)
{
this.CompareNumberOfKids(x, y);
}
public int CompareNumberOfKids(Employee x, Employee y)
{
if (x.NumberOfKids > y.NumberOfKids)
{
return -1;
}
else if (x.NumberOfKids < y.NumberOfKids)
{
return 1;
}
else
{
return 0;
}
}
}
我的商业实体
public class Employee : IComparable<Employee>
{
//...//
Public NumberOfKids { get; set; }
int IComparable<Employee>.CompareTo(Employee next)
{
return new EmployeeComparer().Compare(this, next);
}
public override bool Equals(object obj)
{
if (obj != null && obj is Emmployee)
{
return ((Employee)obj).ID.Equals(this.ID);
}
else return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
Aspx.cs
public List<Employee> GetEmployeeSortedList()
{
List<Employee> list = new List<Employee>();
list.Add(new Employee() { Name = "A", NumberOfKids = 0 } );
list.Add(new Employee() { Name = "B", NumberOfKids = 0 } );
list.Add(new Employee() { Name = "C", NumberOfKids = 2 } );
list.Add(new Employee() { Name = "D", NumberOfKids = 1 } );
list.Add(new Employee() { Name = "E", NumberOfKids = 0 } );
list.Add(new Employee() { Name = "F", NumberOfKids = 4 } );
list = list.Take(3).ToList();
EmployeeComparer comp = new EmployeeComparer();
list.Sort(comp);
return list;
}
【问题讨论】:
-
我刚刚运行了这段代码,它对它进行了正确排序。你确定这是你在做什么?
-
这段代码对我来说看起来不错,虽然你不需要
IComparable和IComparer比较器就足够了。此外,您可以删除if语句以支持x.NumberOfKids.CompareTo(y.NumberOfKids),因为标准 .NET 类型已经实现了IComparable<T>。
标签: c# list sorting icomparable icomparer