【发布时间】:2009-01-11 22:53:16
【问题描述】:
我最近开始学习 LINQ,偶然发现了OrderBy 扩展方法。这最初让我很兴奋,因为它的语法似乎比我们在通用列表中到处使用的 Sort 方法要好得多。
例如,在对语言列表进行排序时,我们通常会这样做:
neutralCultures.Sort((x, y) => x.EnglishName.CompareTo(y.EnglishName));
这很好用,但我更喜欢OrderBy 的语法,它只要求您传入您希望排序的属性,如下所示:
neutralCultures.OrderBy(ci => ci.EnglishName);
问题是OrderBy 返回IOrderedEnumerable,但我需要List<T>。因此,我开始使用与 OrderBy 相同的签名来扩展 Sort 的 List<T> 方法。
public static void Sort<TSource, TKey>(this List<TSource list, Func<TSource, TKey> keySelector)
{
list = list.OrderBy(keySelector).ToList<TSource>();
}
这将被称为:
neutralCultures.Sort(ci => ci.EnglishName);
也许我忽略了一个简单的实现细节,但这段代码不起作用。它编译,但不返回有序列表。我确信我可以重构它以使其工作,但我只是想知道为什么在扩展方法中设置 list 不起作用。
【问题讨论】: