Nullable<int?> Невозможно, почему бы и нет?

Извините, если это глупый вопрос, я пытаюсь лучше понять типы Nullable в.Net.

Из того, что я заметил из исходного кода Microsoft (используя ReSharper), я понимаю, что Nullable является структурой, а T должен быть структурой

public struct Nullable<T> where T : struct

Теперь я попытался сделать что-то вроде этого

public struct CustomNullable<T> where T : struct
{
}
public class CustomNullableClass<T> where T : struct
{
}

И я получаю сообщение об ошибке при компиляции:

  Nullable<int?> a = null;
  Nullable<Nullable<int>> a1 = null;

В приведенном выше коде я получаю сообщение об ошибке "В основе System.Nullable могут лежать только типы значений, не допускающие значения NULL", но как это применяется в типе Nullable?

И для

   CustomNullable<int?> a2 = null;
   CustomNullableClass<int?> a3 = null;

Я получаю сообщение об ошибке "Тип System.Nullable должен быть ненулевым типом значения, чтобы использовать его в качестве параметра T".

Я сейчас немного растерялся, может кто-нибудь помочь мне понять, что происходит, или я чего-то не понял?

Заранее большое спасибо.

РЕДАКТИРОВАТЬ: Если структуры являются типами значений и типы значений не могут быть нулевыми, как Nullable может быть структурой?

Кредит: спонсор

2 ответа

Решение

На самом деле, это внутренний взлом где-то в компиляторе C# (догадываюсь). Вы не можете повторить это в своих собственных классах. Если вы создадите свой собственный тип, используя точно такой же IL, он не будет применять это дополнительное скрытое ограничение.

Специально поддерживается компилятор для Nullable, Вы не способны воспроизвести ряд возможных вариантов поведения Nullable с пользовательской структурой. Вы упомянули здесь одно из Nullable не соответствует общему ограничению для struct несмотря на то, что struct,

Другие вопросы по тегам