当我们有两个结构,并且一个可以隐式转换为另一个时,看起来这两个结构的System.Nullable<>
版本也可以隐式转换。就像,如果 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 中,我们读到“预定义的隐式标识和数字转换”应该存在这样的转换。
但是假设它也适用于用户定义的隐式转换是否安全?
(这个问题可能与这个错误有关:http ://connect.microsoft.com/VisualStudio/feedback/details/642227/ )