当我们有两个结构,并且一个可以隐式转换为另一个结构时,这两个的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/

10-11 18:27