「ClientContacts」のリストを取得しました --- LastName (人間の場合) または EntityName (techsupport@mycompany.com などの一般的な連絡先の場合) のいずれかを持ちます。
私がやりたいのは、この List を LastName でアルファベット順に並べ替え、LastName が存在しない (つまり、EntityName が存在する) 場合は、その EntityName を LastName として扱い、LastName であるかのように並べ替えを続行することです。
望ましい結果は次のようになります。
- ボンド・ジェームズ
- 顧客サポート
- ゲイツ・ビル
- 技術サポート
- ウィリアムズ・ロビン
これにより、LastName を持たない ClientContacts が発生するため、クラッシュが発生します。
clientContactList.Sort(
delegate(ClientContact c1, ClientContact c2)
{ return c1.LastName.CompareTo(c2.LastName); });
そして、次のようにすると、クラッシュすることなく通過でき、ClientContact EntityName の最初と THEN 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);
}
}
});
その結果:
- 顧客サポート
- 技術サポート
- ボンド・ジェームズ
- ゲイツ・ビル
- ウィリアムズ・ロビン
上記の望ましい結果のようにリストをソートするにはどうすればよいですか?