2016-07-22 81 views
0

是否有更简单的方法来编写以下内容? I.E.,没有lambda。OrderBy无简单IE枚举的lambda

var strings = new[] { "Alabama", "Mississippi", "Louisiana" }; 
var ordered = strings.OrderBy(x => x); 

似乎应该是可能的,因为string实现IEquatable<string>

+0

'list.Sort();'也许? –

+3

为什么试图摆脱它?你只需要积极的心态。这个“(x => x)”实际上是我醉酒时走进滑动玻璃门的一个表情符号。 – Will

+0

OrderBy without lambda不会被** ** **] – Slai

回答

6

IComparable这里重要超过IEquatable,但它是可能的:

Array.Sort(strings); 

这工作,因为strings已经是一个数组。既然你问任何的IEnumerable:

var ary = strings.ToArray(); 
Array.Sort(ary); 

注意额外的变量也是本次样本中很重要,因为Array.Sort()排序,而不返回的结果通过了实际的对象,并调用.ToArray()创造了一个新的数组,那么这是扔掉。没有额外的变量,你就失去了工作。

对于List<T>对象,您也可以使用类似的排序方法。

您也可以使自己的扩展方法为这样的:

public static class MyExtensions 
{ 
    public static IOrderedEnumerable<T> Sort(this IEnumerable<T> items) where T : IComparable 
    { 
     return items.OrderBy(i => i); 
    } 
} 

而现在你可以只说:

var ordered = strings.Sort(); 
+2

'Array.Sort(strings.ToArray ())'对我来说似乎很愚蠢。它创建一个数组,将其排序,然后丢弃结果。 –

+0

已经添加到我的答案:) –

+0

是的,但这会创建一个新的阵列。我一直希望有一个更简洁的扩展方法,我失踪了,这是其中T签名'静态的IEnumerable 订单(这IEnumerable的枚举)的:IComparable的;' –