SortableBindingList その2
id:siokoshou:20070225 をもうちょっと改良してみるの巻。
CodeZineで同じネタがVB化されてました。
元ネタはこちら。http://www.microsoft.com/japan/msdn/columns/winforms/winforms02182005.aspx
CodeZineの記事は明らかに元ネタを参考にしているのに参考資料にあげてないのは、元ネタのコードがそのままじゃ動かないから?それより、EULAに抵触するような気がしないでもないけど、動かないコードを載せたまま更新してないMSDNのほうがどうかと思うので、まあいいや。
この SortableBindingListSortableBindingList BindingSource.DataSource に SortableBindingList( list ) を入れるだけでソートできるってのはホントに便利。リフレクションを使うから遅いんだけど、どうせ DataGridView の表示はその何百倍(?)も遅いので、まあいいかなと。
で、ふと、このコードの肝の PropertyComparer
プロパティ名のところは stringだと楽だけど、型安全にこだわる.NET的には PropertyComparer
元ネタでは PropertyComparer
トップに出てきた CodeProject のコードはなかなかよさげ。これは string でプロパティ名を指定してますね。
http://www.codeproject.com/useritems/PropertyComparer.asp
長い前振りはここまでにして、SortBy として使うとなるとやっぱり遅さが気になるんで、高速化にチャレンジしてみました。コードが気に入らないって理由もあったりしますが書いた人には内緒にしといてください。最初に断っておくと、まだ途中です。2倍弱速くなったけど、それだけ(^^;
Compare が呼ばれるたびにリフレクションで値を取り出すので、きっとここが遅いと。メモ化がおそらく効果的で、あとはリフレクションを使わないようにできないかなぁと妄想。できるのかどうか知らないけど、ジェネリクスとリフレクションのあたりはおもしろそうなので、いろいろ調べつつ挑戦。
前回載せなかった SortableBindingList