«Ковариация» структуры System.Nullable<>

Когда у нас есть две структуры, и одна из них неявно преобразуется в другую, тогда кажется, что System.Nullableверсии этих двух также неявно конвертируемый. Например, если структура Aимеет неявное преобразование в структуру 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/)

6
задан Jeppe Stig Nielsen 9 May 2012 в 14:33
поделиться