任何人都可以解释为什么.net框架在我使用Enumerable.OrderBy时不会调用我的比较器的比较方法.而当我使用List.Sort()时它会被调用.
//以下代码取自StackOverFlow.com上的另一篇文章
class Employee
{
public string Name { get; set; }
public int Salary { get; set; }
}
class Employee_SortBySalaryByAscendingOrder : IComparer<Employee>
{
#region IComparer<Employee> Members
public int Compare(Employee x, Employee y)
{
if (x.Salary > y.Salary) return 1;
else if (x.Salary < y.Salary) return -1;
else return 0;
}
#endregion
}
private void TestSort(object sender, EventArgs e)
{
List<Employee> empList = new List<Employee>()
{
new Employee { Name = "a", Salary = 14000 },
new Employee { Name = "b", Salary = 13000 }
};
Employee_SortBySalaryByAscendingOrder eAsc =
new Employee_SortBySalaryByAscendingOrder();
// Sort Employees by salary by ascending order.
// Does not work
IOrderedEnumerable<Employee> orderedEmployees = empList.OrderBy(x => x, eAsc);
// Works
empList.Sort(eAsc);
}
Run Code Online (Sandbox Code Playgroud)
Lee*_*Lee 10
它不起作用,因为你实际上并没有评估orderedEmployees
序列.您需要使用ToList
或强制进行评估ToArray
.
Linq使用延迟执行,因此在以下位置定义您的排序查询:
IOrderedEnumerable<Employee> orderedEmployees = empList.OrderBy(x => x, eAsc);
Run Code Online (Sandbox Code Playgroud)
没有做任何工作来实际订购输入序列.只有当您尝试使用查询结果时才会完成排序.
归档时间: |
|
查看次数: |
488 次 |
最近记录: |