3

たとえば、C#のオブジェクトの一般的なリストがあります。オブジェクトは次のとおりです。

public class Thing {
    public string Name { get; set; }
    public DateTime EditDate { get; set; }
}

var things = new List<Thing>();

今私は電話したい:

thing.Sort((t1, t2) => t1.EditDate.CompareTo(t2.EditDate));

ただし、私の EditDate プロパティの一部は null です。null の EditDate プロパティを持つこれらのオブジェクトをリストの一番上 (つまり、ゼロ インデックスの近く) に表示したいと考えています。これどうやってするの?

4

4 に答える 4

14

次のような、やや複雑なラムダを作成できます。

things.Sort((t1, t2) => 
{
 if (t1 == null)
 {
   return (t2 == null) ? 0 : -1;
 }
 if (t2 == null)
 {
   return 1;
 }
 return t1.EditDate.CompareTo(t2.EditDate);
});

EndDatenull値型であるため、することはできません。EndDateただし、と見なすの特定の値がある場合nullは、上記のコードを変更して、私が対処した方法t1t2であるのと同様の方法でそれを考慮することができますnull

于 2008-11-25T17:05:51.603 に答える
2

null editDates を持つ Thing が edit Date を持つ Thing よりも高い順序を持つように、Thing に IComparable を実装させます。次に、編集日ではなくオブジェクトでソートするようにソート式を変更します。

于 2008-11-25T17:07:53.223 に答える
0

ffpf からの回答が機能するはずです。

しかし、時間があれば、BCL チームからの null を使用した並べ替えに関するこのすばらしい投稿を読んでください

于 2008-11-25T17:14:03.663 に答える
0

リストには、デリゲートを取るソート関数があります。

質問を読んだ今、

TheList.Sort(int delegate(Type a, Type b)
{
    if (a.memeber == null) return -1;
    if (b.memeber == null) return 1;
    if (a.memeber<b.memeber) return -1;
    if (b.memeber<a.memeber) return 1;
    return 0;
}
于 2008-11-25T17:02:12.877 に答える