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

我的代码看起来像这样:

Collection optionInfoCollection = .... List optionInfoList = new List(); optionInfoList = optionInfoCollection.ToList(); if(_isAlphabeticalSoting) Sort optionInfoList 

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

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

 myList.Sort((a, b) => String.Compare(a.Name, b.Name)) 

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

如果你只想让Sort()工作,那么你需要在类中实现IComparableIComparable

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

 list.Sort(item => item.Name); 

例如:

 public static void Sort( this List source, Func selector) { var comparer = Comparer.Default; source.Sort((x, y) => comparer.Compare(selector(x), selector(y))); } public static void SortDescending( this List source, Func selector) { var comparer = Comparer.Default; source.Sort((x, y) => comparer.Compare(selector(y), selector(x))); } 
 public class Person { public string FirstName { get; set; } public string LastName { get; set; } } List people = new List(); people.Sort( delegate(Person x, Person y) { if (x == null) { if (y == null) { return 0; } return -1; } if (y == null) { return 0; } return x.FirstName.CompareTo(y.FirstName); } ); 

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

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