Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按对象上的属性对列表中的对象进行排序_C#_List_Sorting_Properties - Fatal编程技术网

C# 按对象上的属性对列表中的对象进行排序

C# 按对象上的属性对列表中的对象进行排序,c#,list,sorting,properties,C#,List,Sorting,Properties,我有一个C#中的对象列表。所有对象都包含属性code1和code2(以及其他属性)。对象列表没有特定的顺序。 我需要按对象的code1和code2属性对对象列表进行排序 例如: List -> object = id, name, code1, code2, hours, amount. 示例代码1=004 示例代码2=001、002、003、004、016 示例代码1=005 示例代码2=001、002、003、004 所以在排序之后,我希望对象的顺序如下 004 001 004 00

我有一个C#中的对象列表。所有对象都包含属性code1和code2(以及其他属性)。对象列表没有特定的顺序。 我需要按对象的code1和code2属性对对象列表进行排序

例如:

List -> object = id, name, code1, code2, hours, amount.
示例代码1=004
示例代码2=001、002、003、004、016
示例代码1=005
示例代码2=001、002、003、004

所以在排序之后,我希望对象的顺序如下

004 001
004 002
004 003
004 005
004 016
005 001
005 002
005 003
005 004

您可以使用linq扩展(保留原始列表未排序):

要将原始列表替换为已排序的列表,请稍作修改(效率不高,它会创建一个新列表):

这假设您的列表类型正确,例如:

List<MyClass> theList = new List<MyClass>();
List theList=新列表();

而不是对象列表,在这种情况下,您需要使用
.Cast()
.OfType()

注意,Adam Houldsworth对
.ToList()
调用的回答不必要地创建了一个新列表。如果您的列表很大,这可能会造成无法接受的内存压力。最好通过提供自定义比较功能对列表进行适当排序:

theList.Sort((a, b) =>
    {
        var firstCompare = a.code1.CompareTo(b.code1);
        return firstCompare != 0 ? firstCompare : a.code2.CompareTo(b.code2);
    });
或者,如果这种排序是您的类型的固有属性,您可以对您的类型实现
IComparable
,只需调用

theList.Sort();

。。。它将使用
IComparable.CompareTo()
实现。

请注意,这会使原始列表未排序。这正是我要查找的。谢谢。我想你也知道,托利斯特的电话仍然没有对原来的名单进行排序;它将创建一个新列表,其中的项目按顺序排列。这很可能比对列表进行排序稍微慢一点;它肯定需要更多的内存,如果列表很大,额外的内存压力可能会对性能产生重大影响。@phoog很公平-我推迟提供排序方法的实现,因为如果不编译并尝试它,我就无法对它有信心。我已经把我的答案修改得更明确了一点。+1不知道你为什么被否决。@Adamhuldsworth当然你的方法给出了更简洁的代码。如果我确定列表中包含的项目不会超过几个,我可能会使用Linq,因为在这种情况下,性能可能不会成为问题。
theList.Sort((a, b) =>
    {
        var firstCompare = a.code1.CompareTo(b.code1);
        return firstCompare != 0 ? firstCompare : a.code2.CompareTo(b.code2);
    });
theList.Sort();