对于简单的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>
。
这里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();
对于.NET 7或更高版本,请使用Order
。
var strings = new[] { "Alabama", "Mississippi", "Louisiana" };
var ordered = strings.Order();
dotnet/运行时#67194