如何使用lambda表达式对相同的列表进行排序?

时间:2014-02-12 08:22:19

标签: c# lambda

我尝试对现有列表ICollection<T>进行排序但失败了。以下是我尝试过的内容。没有错误但也没有效果。

....
ObjectList.OrderBy(x=>x.Name);
....

我是否完全不使用上述方式对列表进行排序?我也尝试过:

ObjectList = ObjectList.OrderBy(x=>x.Name);

但这更糟糕,因为它给我的错误说我错过了演员。

是否可以对相同的列表进行排序,而不是将其分配给另一个变量?

3 个答案:

答案 0 :(得分:3)

简答为否,如果不将ICollection分配给另一个变量,则无法对其进行排序。 ICollection接口不会暴露任何方式。

但是,在您的示例中使用OrderBy进行排序的工作方式与切除相同,但返回IEnumerable而不是ICollection。

我会将它分配给另一个变量,如:

var sortedList = ObjectList.OrderBy(x=>x.Name);

答案 1 :(得分:1)

你必须在那里添加.ToList()因为OrderBy返回一个IEnumerable,所以你试着:

ObjectList = ObjectList.OrderBy(x=>x.Name). ToList() ;

答案 2 :(得分:1)

这种通用排序操作不存在,因为不清楚如何对通用集合进行排序。如果您的集合是List<T>,则可以在那里使用Sort方法(因为可以对列表进行排序)。但是,其他收藏品如哈希集只是不允许排序,因此如果您希望对集合进行排序,则必须创建一个新集合。