Почему 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 код?

Я читаюэтот вопрос но это просто говорит о том, что невозможно, ни один из ответов не говорит в основном, почемуне возможно

Ответы на вопрос(3)

Ваш ответ на вопрос