……那n => n
有什么用?
它只是将任何值映射到自身。这是一个身份功能。
为什么不直接说 OrderBy(n)?
因为n
它不是范围内的变量——这样调用它是无效的。这不是一个 lambda 表达式,所以它只会尝试n
用作普通的方法参数。
您的代码只是想说“按每个元素的整个顺序排列此序列”,而不是将每个元素投影到其他值,但没有办法直接这么说。
OrderBy
需要从元素类型到排序键类型的投影——只是在这种情况下我们需要标识投影。
您可以编写自己的额外扩展方法:
public static IEnumerable<T> OrderNaturally<T>(this IEnumerable<T> source)
{
return source.OrderBy(item => item);
}
然后将您的原始声明更改为:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderNaturally();
如果您发现它更具可读性。
或者,您可以创建一个Functions
包含一些有用的静态只读字段的类:
public static class Functions<T>
{
public static readonly Func<T, T> Identity = x => x;
public static readonly Func<T, T> DefaultValue => x => default(T);
public static readonly Func<T, string> ToString = x => x == null ? null : x.ToString();
...
}
然后:
IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0)
.OrderBy(Functions<int>.Identity)
我不认为我会那样做......我只是在建议要考虑的事情:)