あいまいなユーザー定義の変換を回避する方法C#Tweetタイトルの通り黒魔術です(多分)、実行環境ごとの動作はどうなるかわかりません。C#などの仕様変更で使い物にならなくなる可能性はあります。operatorとはなんぞやC#では比較演算子などのオーバーロードができます。operatorがあります。こいつらは暗黙的なキャストと明示的なキャストをオーバーロードすることができます。operatorなら明示的なキャストが必要でになります。operatorは変換元のクラス/構造体以外に変換先のクラス/構造体にも定義することができて、以下のコードも合法です。operatorが定義できる場所は2箇所ということになります。2箇所で定義したらどうなる?当然生まれる疑問です。以下のコードに関しては合法です。A3();まぁ、当たり前っちゃ当たり前です。operatorを実行すればいいかわからないのだから。黒魔術ちょっと必要性があって式ツリーでキャストするコードを描いていた時に気づいてしまいました。A3()).GetType().Name);コンパイル時のチェックはもちろんできないのでコンパイルできてしまいます。operatorB3が出力されるので、見事「あいまいなユーザー定義の変換」を回避できてしまいました。operatorの場合も同じ挙動です。