c# 按联系人状态和名称对列表中的对象进行排序

标签 c# sorting .net-3.5 instantmessenger

我有一个包含对象的 BindingList,其中保存了一些联系人。

 internal static BindingList<object> contactList;

contactList 对象的类型较多。 SktContact、FBContact、GContact。

我在 contactList_Changed 事件中将这些联系人添加到列表框。但我想按状态(首先在线)对它们进行排序,然后按字母顺序排序。

我想这样想:

  List<object> contactSorted = new List<object>();
  contactSorted = Global.contactList.ToList();

  contactSorted.OrderBy((status, name) => Converter.getContactAvailabilityStatus(contactSorted[?]), Converter.getContactName(contactSorted[?]));

  contactListBox.Items.AddRange(contactSorted.ToArray());

但我不知道该怎么做。我无法重新键入对象列表并选择要排序的属性。

我有从任何对象获取状态和名称的方法。但是如何使用它对联系人数组进行排序?

我正在使用自己的绘图Owner draw fixed

 private void contactListBox_DrawItem(object sender, DrawItemEventArgs e)

最佳答案

  1. 感觉您可以为联系人类型使用一个接口(interface):

    interface IContact
    {
        string Status { get; }
        string Name { get; }
    }
    
    class FBContact : IContact
    {
        public string Status
        {
            get
            {
                // Implement the status getter   
            }
        }
        public string Name
        {
            get
            {
                // Implement the contact name getter   
            }
        }
    } 
    
  2. 然后就

    var unsortedList = Global.contactList;
    var contactSorted = unsortedList.Cast<IContact>()
                                    .OrderBy(x => x.Status)
                                    .ThenBy(x => x.Name);
    
    contactListBox.Items.AddRange(contactSorted.ToArray());
    

关于c# 按联系人状态和名称对列表中的对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007794/

相关文章:

c# - 安装 4.x 时 Windows 提示安装 .NET 3.5

c# - 将 jquery json 传递给 asp.net httphandler

c# - WCF如何创建连接到同一个服务实例的两个 channel

c - 在任意排序中无效使用带有 memcpy 的 void 表达式

javascript - 在 JavaScript 中对大型(ish)数字数组进行排序的最快方法是什么

c# - 如何使用 WCF 签署 SOAP 请求

c# - 在窗体之间传递值 (winforms)

c# - Reflection.Emit 不安全代码

c# - 如何使用 C# 获取运行代码的操作系统的名称?

c++ - 在 C++ 中对 200 万个数字进行排序