为什么这个OrderBy没有抛出错误?

时间:2012-08-04 23:51:31

标签: c# asp.net

我有一个我想订购的号码列表。

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

如果我这样做,它可以正常工作

.OrderBy(n => n)

只是为了它,我试过

.OrderBy(n => "ASC")

它不起作用,但它没有抛出错误。如果我将鼠标悬停在OrderBy上,则intellisense会显示,

IOrderedEnumerable<int> IEnumerable<int>.OrderBy<int,string>(Func<int,string> keySelector)

好奇,为什么?

感谢。

5 个答案:

答案 0 :(得分:4)

不会抛出错误。您要告诉它使用"ASC"进行比较,它就是这样做的。

答案 1 :(得分:1)

此方法使用默认比较器比较键。每个元素的关键是“ASC”。不违法。

答案 2 :(得分:0)

正如其他人所说,这是因为这是完全合法的。你也可以这样做:

 Enumerable.Range(0,20).OrderBy(x=>x.ToString());

你会按字母顺序排列整数。

0
1
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9

答案 3 :(得分:0)

你要说的是按一些值对对象进行排序,其中每个要排序的值都是通过每个对象获得的;通常这将是该对象的属性或功能。您可以将其视为数据库或电子表格中的“列”。

例如:

var employeesByName = Employees.OrderBy(employee => employee.Name);

提供按名称值排序的可枚举员工对象。如果你是这样做的话:

var employeesByConstant = Employees.OrderBy(employee => "ASC");

然后您将获得一个由“列”排序的可枚举员工对象,其中所有值都是“ASC”。根据使用的排序算法,这可能没有任何影响,或者有些任意顺序。

答案 4 :(得分:0)

它有效,但它不能按你的意愿工作,因为你使用&#34; ASC&#34;进行比较。

如果您想订购号码,请使用:
.OrderBy(i => i);
.OrderByDescending(i => i);