我有一个包含对象的 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)
最佳答案
感觉您可以为联系人类型使用一个接口(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 } } }
然后就
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/