読者です 読者をやめる 読者になる 読者になる

たぷつきません

おなかがでてきた。もうたぷついてるやん。

演算子オーバーライドしたオブジェクトをnullで比較すると「次のメソッドまたはプロパティ間で呼び出しが不適切です」となる

 == と != をオーバーロードしたクラスがあって、そのインスタンスを == null で比較すると次のようなビルドエラーが出る。

次のメソッドまたはプロパティ間で呼び出しが不適切です: 'MyClass.operator == (MyClass, object)' と 'MyClass.operator == (object, MyClass)'

 これは気を利かせすぎてオーバーロードメソッドを用意しすぎたことが問題だった。このエラーが出た時は以下を用意してしまっていた。

  operator ==(MyClass, MyClass);
  operator ==(MyClass, string);
  operator ==(string, MyClass);
  operator ==(MyClass, object);
  operator ==(object, MyClass);

 stringとobjectの両方があるとダメで、以下のように減らしたところ解決。

  operator ==(MyClass, MyClass);
  operator ==(MyClass, object);
  operator ==(object, MyClass);

 Equalsの中でちゃんとGetTypeすれば良いだけだしね。ただビルドエラーのメッセージが直接言い当てていないのが気になる。どういうビルドプロセスがあって、このようなエラーになるのかは謎のまま。時間があったら調べてみたいけど。