30831


C#のoperator==演算子をoverrideして異なる型同士の比較を行いたいと考えています。

サンプルは下記になります。  
<https://gist.github.com/seijiro/0e3c63e21a250321da16ecfe9143978b>

[code]

     // Some(hoge)とhogeは同じオブジェクト
       void Func(IOption<Hoge> opt, Hoge hoge){
            opt == hoge; // true になるようにしたい
       }
    
[/code]

暗黙型変換で対応しようと考えましたがInterfaceにキャストできずに断念しました。  
どのようにすれば上記のような演算子を実装できますでしょうか。


CC BY-SA 3.0
2016-12-02T06:43:45.520
30830
2016-12-18T12:33:58.233
2016-12-18T12:33:58.233
8000
4041
question
c#
C#で異なる型の比較をoperator==で記述したい


C#の演算子オーバーロードには以下のような制約があります。

  1. シグネチャ(引数もしくは型変換の戻り値)にメソッドを定義する型を含まなければならない。
  2. インターフェイスを含む型変換は定義できない。

ですので質問の例は`Hoge`型に演算子を定義するしかないと思います。  
外部からインターフェイス型と既存の型との演算子を定義することはできませんので、通常は拡張メソッドで代用することになります。


CC BY-SA 3.0
2016-12-02T07:31:55.890
30831
2016-12-02T07:31:55.890
5750
30830
answer