OrderBy没有lambda用于简单的IEnumerables

时间:2016-07-22 19:50:38

标签: c# .net linq

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

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

似乎应该可以,因为string实现了IEquatable<string>

1 个答案:

答案 0 :(得分:6)

这里IComparableIEquatable更重要,但有可能:

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();