BinaryFormatterによる深いコピーと深い同値性判定

BinaryFormatterによってあるオブジェクトのグラフ全体をバイト配列にシリアライズできることを利用して、深いコピーと深い同値性判定を実装できる。ただし対象の型には[Serializable]属性を付けておく必要がある。

例えばある状態のオブジェクトを生成する方法が複数ある状況を想定する。それらの方法で本当に同じ状態のオブジェクトが生成できているのかをテストする時に深い同値性判定が必要になる。

もちろんIEquatable<T>を実装したり同値性判定メソッドを自分で書いても良いが、可変型かつデータ構造が階層になっている(MyClass1のプロパティにMyClass2があって…というような)型で手軽に深い同値性判定を行いたい場合にBinaryFormatterを利用したこの方法が有効だった。この方法で同値性判定するユニットテストを書いておけば、将来フィールド・プロパティが追加された場合にもテストコードの変更なしでテストできる。