【发布时间】:2017-11-17 10:51:21
【问题描述】:
这似乎是一个显而易见的问题,并且可能会有关于此主题的先前问题,请指出并在必要时关闭,因为我找不到它们。
是否有任何 Linq 扩展方法可以通过元素本身返回有序序列?我知道可以通过以下方式实现:
IEnumerable<int> myIntegers = new int[]{4, 6, 34, 987, -13};
IEnumerable<int> myOrderedIntegers = myIntegers.OrderBy(i => i);
我不喜欢这样,这样一个简单的操作似乎太冗长了。我知道我也可以这样做:
List<int> myOtherOrderedIntegers = myIntegers.ToList();
myOtherOrderedIntegers.Sort();
但是呃...再见延迟评估,甚至更冗长。我可以编写我的扩展方法,例如...
public static IEnumerable<T> Order<T>(this IEnumerable<T> elements) => elements.OrderBy(e => e);
public static IEnumerable<T> OrderDescending<T>(this IEnumerable<T> elements) => elements.OrderByDescending(e => e);
是否已经有任何Linq扩展方法可以实现这个简单的操作?我觉得它还没有实现很奇怪。
提前致谢。
【问题讨论】:
-
不,没有。
OrderBy(i => i)对你来说真的那么冗长吗? -
为什么你觉得
IEnumerable<int> myOrderedIntegers = myIntegers.OrderBy(i => i);太冗长了? -
对于复杂类型的排序列表,您的扩展方法将无法正常工作(除非您的类型实现
IComparable<T>) -
好吧,这并不是一个真正的问题,我只是认为如果存在这样的方法会更清楚(这种情况下的 lambda 对我来说似乎没有必要)。感谢您的回答,请随时正确回答,我会投票并选择。
-
@DanielGarcíaRubio 如果您认为扩展方法主要用于支持查询语法,那么 lambda 是有意义的,即使它是单列(即 self )。像
Order()这样的东西意义不大,因为查询语法永远不会用到它。人们创建了许多额外的扩展,其中一个流行的是 MoreLINQ。