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

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

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

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