C# 对列表排序<;T>;通过T';s属性

C# 对列表排序<;T>;通过T';s属性,c#,C#,我有一个列表 如何按T的int属性之一对其进行升序排序 我知道我可以手动创建我自己的方法,但是有什么方法可以像List.Sort(按T的int属性)那样简洁地实现这一点吗 您可以使用可枚举Orderby按其属性进行排序 List<yourType> yourCollection = YourSourceList.OrderBy(e=>e.YourProperty).ToList(); List yourCollection=YourSourceList.OrderBy(e=>

我有一个
列表

如何按T的int属性之一对其进行升序排序


我知道我可以手动创建我自己的方法,但是有什么方法可以像
List.Sort
(按T的int属性)那样简洁地实现这一点吗

您可以使用可枚举Orderby按其属性进行排序

List<yourType> yourCollection = YourSourceList.OrderBy(e=>e.YourProperty).ToList();
List yourCollection=YourSourceList.OrderBy(e=>e.YourProperty.ToList();
是的,您可以使用:


一种效率较低但可读性更高的方法是使用可枚举的

list = list.OrderBy(t => t.IntProperty).ToList();
试试这个:

 List<T> lst=List<T>.OrderBy(x => x.Property).ToList();
List lst=List.OrderBy(x=>x.Property.ToList();

他们尝试将此代码添加到您的列表中,以便对ASC/DESC进行排序

 List<HRDocumentCheckList> ser=new List<HRDocumentCheckList>();
 ser.OrderByDescending(q => q.Document.Id).ToList();
List ser=newlist();
ser.OrderByDescending(q=>q.Document.Id).ToList();
希望它能帮助你编写自己的课程。然后使用该类进行排序,例如:

myList.Sort(new MyListComparer());

对于那些没有特权使用Lamda表达方法的人,这被接受为答案,他们可以遵循下面给出的方法。核心思想是实现
IComparable
,从而检查对象中定义的任何特定属性/字段,这里是“
Person

public class ConsoleApp
    {
        private static void Main(string[] args)
        {
            List<Person> p = new List<Person>();
            p.Add(new Person() {Age = 25, Name = "Jo"});
            p.Add(new Person() {Age = 10, Name = "Jo"});
            p.Add(new Person() {Age = 2, Name = "Jo"});
            p.Sort();

        }
    }

    public class Person : IComparable<Person>
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public int CompareTo(Person other)
        {
            return other == null ? 1 : Age.CompareTo(other.Age);
        }
    }
公共类控制台
{
私有静态void Main(字符串[]args)
{
列表p=新列表();
p、 添加(newperson(){Age=25,Name=“Jo”});
p、 添加(newperson(){Age=10,Name=“Jo”});
p、 添加(newperson(){Age=2,Name=“Jo”});
p、 排序();
}
}
公共类人物:i可比较
{
公共字符串名称{get;set;}
公共整数{get;set;}
公共int比较(其他人)
{
返回other==null?1:Age.CompareTo(other.Age);
}
}

是否允许您使用LINQ?您是指按属性进行常规排序,还是仅指您也具有完全访问权限的常规
列表
?谁想对否决票进行评论?3次否决票以获得正确答案?wtf?+1对这个好答案投了赞成票,并减少了否决票的影响:)@TimSchmelter感谢您的反馈。我改了。不是林克。这是一个简单的可枚举类。
Enumerable.OrderBy
ToList
是Linq方法,
ToList
创建一个新的
列表
,即使已经有一个。
List.Sort
(或
Array.Sort
)的目的是避免创建新的集合,因为这会使所需内存(暂时)翻倍:@TimSchmelter,我知道。ToList()创建一个新的。Sort()将在同一列表中进行更改。所以排序是有效的。Linq是它的名称空间中的内容,
Enumerable
系统的一部分。Linq
名称空间。这是
Linq To Objects
@TimSchmelter,谢谢你提供的信息。
public class ConsoleApp
    {
        private static void Main(string[] args)
        {
            List<Person> p = new List<Person>();
            p.Add(new Person() {Age = 25, Name = "Jo"});
            p.Add(new Person() {Age = 10, Name = "Jo"});
            p.Add(new Person() {Age = 2, Name = "Jo"});
            p.Sort();

        }
    }

    public class Person : IComparable<Person>
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public int CompareTo(Person other)
        {
            return other == null ? 1 : Age.CompareTo(other.Age);
        }
    }