EqualityComparer を覗いてみる

EqualityComparer.Default とかすると比較子が取れるなんとも不思議なクラスですが、こんなふうになってるんですね(monoです)。自身を継承したクラスを強引に作ってる(^^;

Equals メソッドで T のオブジェクトが null か判定しています。この部分は IL には box 化して null と比較するコードが出てきます。T が値型の場合は、リッチャー本(プログラミングMS .NET FRAMEWORK 第2版 (マイクロソフト公式解説書))によれば JIT コンパイラが比較処理を取り除いてしまうそうです。 struct 制約をつけると null との比較はコンパイルエラーになります。賢いんだけど、ややこしいですねぇ。