2016-10-05 11 views
2

私は、オプションの< T>という名前のカスタムクラスを持っています。ネストされた暗黙の演算子

public static implicit operator Optional<T>(T value) 
{ 
    return new Optional<T>(value); 
} 

public static implicit operator T(Optional<T> value) 
{ 
    return value.value; 
} 

これらの作品のように、今、すべての罰金、直接操作まで、[OK]を::このクラスは、暗黙の演算子、このようなものを上書きします

Optional<int> val = 33; //ok 
int iVal = val; //ok 

しかし、これは動作しません:

Optional<Optional<int>> val = 33; //error, cannot convert implicitly 

私は前のケースをどのようにサポートできるのだろうかと思っています。

乾杯。

答えて

2

ユーザー定義の暗黙の演算子を連結することはできません。 AからBへ、BからCへの暗黙の変換を定義すると、両方を呼び出すAからCへの暗黙の変換はありません。別のユーザー定義のAからCへの変換を作成するか、明示的な変換で変換を半分にする必要があります。

+0

明示的な演算子を使用してこのケースを支援する方法の例を追加できますか?ありがとう。 – Gusman

+0

@Gusman AからBへとBからCへの暗黙の変換がある場合、暗黙的なユーザー定義変換を1つだけ使用するので、 'C c =(B)a;'と書くことができます。 – Servy

+0

私はあなたが明示的演算子をオーバーライドすることを意図していると思いました。ありがとう。 – Gusman

関連する問題