1

「ClientContacts」のリストを取得しました --- LastName (人間の場合) または EntityName (techsupport@mycompany.com などの一般的な連絡先の場合) のいずれかを持ちます。

私がやりたいのは、この List を LastName でアルファベット順に並べ替え、LastName が存在しない (つまり、EntityName が存在する) 場合は、その EntityName を LastName として扱い、LastName であるかのように並べ替えを続行することです。

望ましい結果は次のようになります。

  1. ボンド・ジェームズ
  2. 顧客サポート
  3. ゲイツ・ビル
  4. 技術サポート
  5. ウィリアムズ・ロビン

これにより、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);
                }

            }
        });

その結果:

  1. 顧客サポート
  2. 技術サポート
  3. ボンド・ジェームズ
  4. ゲイツ・ビル
  5. ウィリアムズ・ロビン

上記の望ましい結果のようにリストをソートするにはどうすればよいですか?

4

3 に答える 3

6

代わりにこの比較を使用してみてください。

(c1.LastName ?? c1.EntityName).CompareTo(c2.LastName ?? c2.EntityName)
于 2012-04-06T03:10:53.243 に答える
2

LINQ を使用する場合は、次のように実行できます。

var sortedList = list.OrderBy( x => x.LastName ?? x.EntityName );
于 2012-04-06T03:12:36.543 に答える
0

あなたはこれを行うことができます:

list.Sort(delegate(ClientContact c1, ClientContact c2)
{
    return !string.IsNullOrEmpty(c1.LastName) ?
        c1.LastName.CompareTo(c2.LastName) :
        c1.EntityName.CompareTo(c2.LastName);         
});
于 2012-04-06T03:12:25.317 に答える