Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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中,将列表排序在lastname之后,而不是firstname之后_C#_Sorting_Compareto - Fatal编程技术网

C# 在C中,将列表排序在lastname之后,而不是firstname之后

C# 在C中,将列表排序在lastname之后,而不是firstname之后,c#,sorting,compareto,C#,Sorting,Compareto,如何增强我的以下功能 personList.Sort (delegate (Person firstPerson, Person secondPerson) { return firstPerson.Lastname.CompareTo (secondPerson.Lastname); }); 要在姓氏之后排序,而不是在姓氏之后排序?非常简单: var result = firstPerson.Lastname.CompareTo(secondPerson.Lastname); ret

如何增强我的以下功能

personList.Sort (delegate (Person firstPerson, Person secondPerson) {
    return firstPerson.Lastname.CompareTo (secondPerson.Lastname);
});
要在姓氏之后排序,而不是在姓氏之后排序?

非常简单:

var result = firstPerson.Lastname.CompareTo(secondPerson.Lastname);
return result != 0 ? result : firstPerson.Firstname.CompareTo(secondPerson.Firstname);
您可以检查Lastnames是否相等,并相应地进行比较:

personList.Sort (delegate (Person firstPerson, Person secondPerson) 
{
   if(firstPerson.Lastname == secondPersonLasname)
       return firstPerson.Firstname.CompareTo(secondPerson.Firstname);

   return firstPerson.Lastname.CompareTo (secondPerson.Lastname);
});
如果您想使用Linq,还有另一种方法:

personList = personList.OrderBy(p => p.LastName).ThenBy(p => p.Firstname).ToList();

如果您可以/希望重新分配personList,则仅使用LINQ有用:


你的措辞让我有点困惑。您想先按姓再按姓排序吗?或者反过来说?首先是姓氏,如果他们在名字后相等。你的意思是相等我想:对不起,你是对的:顺便说一句:Linq创建了列表的新实例,但不排序-它对现有列表进行排序。我是否必须激活/包括一些内容,因为他没有提议。OrderBy等等?@测试你的意思是使用System.Linq
personList = personList
  .OrderBy(x => x.Lastname)
  .ThenBy(x => x.Firstname)
  .ToList();