コレクションの変換

.NET 2.0 C#で、二種類のオブジェクトの相互変換を行うためのクラスを考えている。変換ルールは以下のような感じ。

1. 同じ名前、同じ型のプロパティだったら無条件に変換
2. 型が違っても、代入互換性があれば変換
3. アノテーションで変換方法が指定されていたら、型に代入互換性がなくても変換

Seasar2をご存知であれば、DxOのようなものを想像して貰えれば良いと思う。(そこまで高機能ではないが)

1.は、特に.NETの場合はリフレクション機能が強力なため、非常に簡単だ。3.も具体的に型コンバータの型などをアノテーションで指定すれば、後はコンバータ任せになるので、これも難しくは無い。問題は2.だろう。

2.も、値型に関しては.NETは型コンバータが充実しているので苦労することはあまり無いと思う。一番の面倒なのはオブジェクト型、それもコレクションだと思う。
.NETの場合、Javaとは違い、ジェネリクスはシンタクスシュガー(糖衣構文)ではないので、Javaのようにコレクション一からげで考える訳にはいかない。また、クローズしたジェネリクス・コレクションは互換性の確保が難しい。この辺はMSDNこの辺を見ると良く解る。
ConvertAllメソッドやConverterデリゲートなんてものが用意されていることだし、これを上手く使うことで、かなりの部分を自動化できそうな気もするんだが。

徹底的にやるか、それとも割り切って出来ることだけやるか、悩むな。