Почему Nullable <T> nullable? Почему это не может быть воспроизведено?
Когда я пишу
Nullable test = null;
Я получаю ошибку компиляции:
The type 'System.Datetime?' must be a non-nullable value type in order to use it as a paramreter 'T' in the generic type or method 'System.Nullable'
НоNullable
этоstruct
так что'должно быть не обнуляемым.
Поэтому я попытался создать это:struct
public struct Foo where T : struct
{
private T value;
public Foo(T value)
{
this.value = value;
}
public static explicit operator Foo(T? value)
{
return new Foo(value.Value);
}
public static implicit operator T?(Foo value)
{
return new Nullable(value.value);
}
}
Теперь, когда я пишу
Nullable test1 = null;
Foo test2 = null;
Foo test3 = null;
Первая строка в порядке, но для второй и третьей строк я получаю две следующие ошибки компиляции:
The type 'System.DateTime?' must be a non-nullable value type in order to use it as a parameter 'T' in the generic type or method 'MyProject.Foo'
(только вторая строка)
а также
Cannot convert null to 'MyProject.Foo because it is a non-nullable value type'
Foo test = new Foo();
Безразлично»не работает ни событие, еслиNullable
это .struct
Концептуально я могу понять, почемуNullable
обнуляется, избегает таких вещей, какDateTime??????????
Однако я все еще могу иметьList
...
Так почему это ограничение и почемуЯ воспроизвожу это поведение вFoo
? Это ограничение применяется компилятором или оно присущеNullable
код?
Я читаюэтот вопрос но это просто говорит о том, что невозможно, ни один из ответов не говорит в основном, почемуне возможно