当我们有两个结构,并且一个可以隐式转换为另一个结构时,这两个的System.Nullable<>
版本似乎也可以隐式转换。就像,如果struct A
具有对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/)
最佳答案
是的。根据C#4规范的6.4.2节:
关于c# - System.Nullable <>结构的"Covariance",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10518230/