对于简单的IEnumerables,OrderBy不带lambda

本文关键字:IEnumerables OrderBy 不带 lambda 于简单 简单 | 更新日期: 2023-09-27 17:58:20

有没有更简单的方法来编写以下内容?也就是说,没有λ。

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

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

对于简单的IEnumerables,OrderBy不带lambda

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

对于.NET 7或更高版本,请使用Order

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

dotnet/运行时#67194