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
,