为了账号安全,请及时绑定邮箱和手机立即绑定

List <T>顺序按字母顺序

/ 猿问

List <T>顺序按字母顺序

C#
富国沪深 2019-10-23 12:59:31

我在Framework 3.5上使用C#。我希望快速对Generic进行排序List<T>。就本例而言,假设我有一个Person具有姓氏属性的类型的列表。如何使用Lambda表达式对该列表进行排序?


List<Person> people = PopulateList();

people.OrderBy(???? => ?????)


查看完整描述

3 回答

?
www说

如果您是就地排序(即列表已更新):


people.Sort((x, y) => string.Compare(x.LastName, y.LastName));

如果您的意思是一个新列表:


var newList = people.OrderBy(x=>x.LastName).ToList(); // ToList optional


查看完整回答
反对 回复 2019-10-23
?
largeQ

您是否需要对列表进行适当排序,还是仅按顺序排列列表内容?后者更容易:


var peopleInOrder = people.OrderBy(person => person.LastName);

要进行适当排序,您需要使用IComparer<Person>或Comparison<Person>。为此,您不妨考虑ProjectionComparer在MiscUtil中。


(我知道我一直在提倡MiscUtil-一直很重要...)


查看完整回答
反对 回复 2019-10-23
?
HUX布斯

private void SortGridGenerico< T >(

          ref List< T > lista       

    , SortDirection sort

    , string propriedadeAOrdenar)

{


    if (!string.IsNullOrEmpty(propriedadeAOrdenar)

    && lista != null

    && lista.Count > 0)

    {


        Type t = lista[0].GetType();


        if (sort == SortDirection.Ascending)

        {


            lista = lista.OrderBy(

                a => t.InvokeMember(

                    propriedadeAOrdenar

                    , System.Reflection.BindingFlags.GetProperty

                    , null

                    , a

                    , null

                )

            ).ToList();

        }

        else

        {

            lista = lista.OrderByDescending(

                a => t.InvokeMember(

                    propriedadeAOrdenar

                    , System.Reflection.BindingFlags.GetProperty

                    , null

                    , a

                    , null

                )

            ).ToList();

        }

    }

}


查看完整回答
反对 回复 2019-10-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信