c# - 按两个变量对列表进行排序

标签 c# list sorting coding-style

获得了“ClientContacts”列表——其中有一个 LastName(如果是人类)或一个 EntityName(如果是通用联系人,例如 techsupport@mycompany.com)。

我想要做的是按姓氏字母顺序排序此列表,并且在不存在姓氏的情况下(换句话说,存在实体名),将该实体名视为姓氏,并继续排​​序,就好像它是姓氏一样。

这样想要的结果好像:

  • 邦德詹姆斯
  • 客户支持
  • Gatsby 尔
  • 技术支持
  • 威廉姆斯罗宾


  • 这会导致崩溃,因为它会遇到一些没有姓氏的 ClientContact。
    clientContactList.Sort(
        delegate(ClientContact c1, ClientContact c2) 
            { return c1.LastName.CompareTo(c2.LastName); });
    

    以下允许我在不崩溃的情况下通过,它按 ClientContact EntityName 的第一个排序,然后是 LastNames:
                list.Sort(delegate(ClientContact c1, ClientContact c2) {
                try
                {
                    return c1.LastName.CompareTo(c2.LastName);
                }
                catch
                {
                    try
                    {
                        return c1.EntityName.CompareTo(c2.LastName);
                    }
                    catch
                    {
                        return c1.EntityName.CompareTo(c2.EntityName);
                    }
    
                }
            });
    

    导致:
  • 客户支持
  • 技术支持
  • 邦德詹姆斯
  • Gatsby 尔
  • 威廉姆斯罗宾


  • 我怎样才能让我的列表排序看起来像上面想要的结果?

    最佳答案

    尝试使用此比较:

    (c1.LastName ?? c1.EntityName).CompareTo(c2.LastName ?? c2.EntityName)
    

    关于c# - 按两个变量对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10038664/

    相关文章:

    java - 为什么这个数组不打印它的所有值(打印 0)?

    c# - 使用 Excel Interop C# 对 Excel 行进行排序

    python - 如何对元组列表执行搜索

    list - 在 List 的情况下,Scala 的 equals 方法如何工作?

    c++ - 使用 Hoare 分区的快速排序

    c# - 带有 'same port' 的 WCF 多主机 header 导致错误

    c# - Xamarin HttpClient : TaskCancelledException

    c# - 为什么要在属性访问器中使用私有(private)变量?

    c# - 从后面的代码向现有的 html 表添加行

    r - 更新列表中的 data.tables