Equalsメソッドと==演算子 in C#

随分前に同じプロジェクトで文字列比較の結果がおかしいと相談された。
簡略化すると下記のようになる。

int i;
string s;

// 省略

if(i.Equals(s))
{
    // 処理
}

こうして見ると原因はintとstringを比較しているからだとわかるが、IDEは特にコンパイルエラーを出さないので気がつきにくい。
==演算子での比較の場合はコンパイルエラーになる。


リファレンスにはこのように記載されている。

[引用]
Int32.Equals メソッド (Object)


パラメータ
obj
このインスタンスと比較するオブジェクト。


戻り値
obj が Int32 のインスタンスで、このインスタンスの値に等しい場合は true。それ以外の場合は false。


そんなわけで値型の場合は ==演算子を使用するのがいいようだ。


その前にみんなリファレンスを読もうよ。。。


【参考】
Equals を使うな。使う事を推奨するな。
http://www.ailight.jp/blog/kazuk/archive/2006/01/31/11043.aspx