获得了一个“ClientContacts”列表---其中包含一个LastName(在人类的情况下)或一个EntityName(在通用联系人的情况下,例如techsupport@mycompany.com)。 / p>
我想要做的是按LastName按字母顺序排序此列表,如果不存在LastName(换句话说,存在EntityName),则将该EntityName视为LastName,并继续排序,就像它是一个姓氏。
这样期望的结果如下所示:
这会导致崩溃,因为它遇到了一些没有LastName的ClientContacts。
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);
}
}
});
导致:
如何将我的列表排序为上面所需的结果?
答案 0 :(得分:6)
请尝试使用此比较:
(c1.LastName ?? c1.EntityName).CompareTo(c2.LastName ?? c2.EntityName)
答案 1 :(得分:2)
如果你使用LINQ,你可以这样做:
var sortedList = list.OrderBy( x => x.LastName ?? x.EntityName );
答案 2 :(得分:0)
你可以这样做:
list.Sort(delegate(ClientContact c1, ClientContact c2)
{
return !string.IsNullOrEmpty(c1.LastName) ?
c1.LastName.CompareTo(c2.LastName) :
c1.EntityName.CompareTo(c2.LastName);
});