Это не совсем ответ, а просто пища для размышлений.
Раунд 1
Nullable<Nullable<int>> a;
ошибка CS0453: тип 'int?' должен быть необнуляемым типом значения, чтобы использовать его как параметр 'T' в универсальном типе или методе 'Nullable'
подсказки Intellisense ...
Имя можно упростить
Раунд 2
Nullable<int?>
a;
ошибка CS0453: тип 'int?' должен быть необнуляемым типом значения, чтобы использовать его как параметр 'T' в универсальном типе или методе 'Nullable'
подсказки Intellisense ...
Имя можно упростить
Раунд 3
int?? a;
ошибка CS1519: неверный токен '??' в объявлении класса, структуры или интерфейса
ошибка CS1525: недопустимый термин "??"
Заключение
int?
- это просто краткая оценка Nullable<int>
, но не существует такой вещи, как int??
, которая является единственным способом, которым я могу представить представление Nullable<Nullable<int>>
в короткой руке. Плюс int??
заимствует оператор слияния, поэтому я рад, что это невозможно, потому что это выглядит ужасно. Представь себе int????????????? a;
Как бессмысленно.
Наконец, поскольку исходный источник для Nullable не дает никаких ограничений для обеспечения этого, я предполагаю, что это ограничение было встроено в CLR как особый случай, когда типы значений, допускающие значение NULL, были введены в C #.