2つの構造体があり、一方が暗黙的にもう一方に変換可能である場合System.Nullable<>
、2つのバージョンも暗黙的に変換可能であるように見えます。同様に、structA
にstructへの暗黙の変換がある場合、同様にB
にA?
変換さB?
れます。
次に例を示します。
struct MyNumber
{
public readonly int Inner;
public MyNumber(int i)
{
Inner = i;
}
public static implicit operator int(MyNumber n)
{
return n.Inner;
}
}
いくつかの方法の内部:
MyNumber? nmn = new MyNumber(42);
int? covariantMagic = nmn; // works!
C#言語仕様バージョン4.0では、「事前定義された暗黙のIDと数値の変換」に対してこのような変換が存在する必要があることを読みました。
しかし、ユーザー定義の暗黙的な変換でも機能すると想定しても安全ですか?
(この質問はこのバグに関連している可能性があります:http://connect.microsoft.com/VisualStudio/feedback/details/642227/)