如何根据T的属性对List <T>进行排序?

15 c# sorting generic-list

我的代码看起来像这样:

Collection<NameValueCollection> optionInfoCollection = ....
List<NameValueCollection> optionInfoList = new List<NameValueCollection>();
optionInfoList = optionInfoCollection.ToList();

if(_isAlphabeticalSoting)
   Sort optionInfoList
Run Code Online (Sandbox Code Playgroud)

我尝试了optionInfoList.Sort()但它无法正常工作.

m-s*_*arp 26

使用sort方法和lambda表达式非常简单.

myList.Sort((a, b) => String.Compare(a.Name, b.Name))
Run Code Online (Sandbox Code Playgroud)

上面的示例显示了如何按对象类型的Name属性进行排序,假设Name的类型为string.


Mar*_*ell 8

如果你只是想Sort()工作,那么你需要实现IComparableIComparable<T>在课堂上.

如果您不介意创建列表,可以使用OrderBy/ ToListLINQ扩展方法.如果要使用更简单的语法对现有列表进行排序,可以添加一些扩展方法,从而启用:

list.Sort(item => item.Name);
Run Code Online (Sandbox Code Playgroud)

例如:

public static void Sort<TSource, TValue>(
    this List<TSource> source,
    Func<TSource, TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
public  static void SortDescending<TSource, TValue>(
    this List<TSource> source,
    Func<TSource, TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
}
Run Code Online (Sandbox Code Playgroud)


mez*_*oid 1

您需要设置一个比较器来告诉 Sort() 如何排列项目。

查看List.Sort 方法 (IComparer)以了解如何执行此操作的示例...