Por que é Nullable <T> anulável? Por que não pode ser reproduzido?

Quando escrevo

Nullable<Nullable<DateTime>> test = null;

Eu recebo um erro de compilação:

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<T>'

MasNullable<T> é umstruct então é suposto ser não anulável.

Então eu tentei criar issostruct:

public struct Foo<T> where T : struct
{
    private T value;

    public Foo(T value)
    {
        this.value = value;
    }

    public static explicit operator Foo<T>(T? value)
    {
        return new Foo<T>(value.Value);
    }

    public static implicit operator T?(Foo<T> value)
    {
        return new Nullable<T>(value.value);
    }
}

Agora quando eu escrevo

        Nullable<Foo<DateTime>> test1 = null;
        Foo<Nullable<DateTime>> test2 = null;
        Foo<DateTime> test3 = null;

A primeira linha é ok, mas para a segunda e terceira linhas eu recebo os dois seguintes erros de compilação:

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<T>' (segunda linha apenas)

e

Cannot convert null to 'MyProject.Foo<System.DateTime?> because it is a non-nullable value type'

        Foo<Nullable<DateTime>> test = new Foo<DateTime?>();

não funciona nem evento seNullable<DateTime> é umstruct.

Conceitualmente, eu posso entender porqueNullable<T> é anulável, evita ter coisas comoDateTime?????????? no entanto eu ainda posso terList<List<List<List<List<DateTime>>>>>...

Então, por que essa limitação e por que não posso reproduzir esse comportamento emFoo<T>? Esta limitação é imposta pelo compilador ou é intrínseca emNullable<T> código?

Eu leioessa questão mas apenas diz que não é possível que nenhuma das respostas diga fundamentalmente porque não é possível.

questionAnswers(3)

yourAnswerToTheQuestion