Почему struct Nullable не является структурой?

) В принципе, почему следующее недопустимо в C#? Я могу нашел много хороших применений для него и фактически может исправить это, создав свой собственный класс структуры, допускающий значение null, но почему и как спецификация C# (и, следовательно, компилятор) препятствует этому?

Ниже приведен частичный пример того, что я Я говорю о.

struct MyNullable<T> where T : struct
{
    public T Value;
    public bool HasValue;

    // Need to overide equals, as well as provide static implicit/explit cast operators
}

class Program
{
    static void Main(string[] args)
    {
        // Compiles fine and works as expected
        MyNullable<Double> NullableDoubleTest;
        NullableDoubleTest.Value = 63.0;

        // Also compiles fine and works as expected
        MyNullable<MyNullable<Double>> NullableNullableTest;
        NullableNullableTest.Value.Value = 63.0;

        // Fails to compile...despite Nullable being a struct
        // Error: The type 'double?' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'ConsoleApplication1.MyNullable<T>'
        MyNullable<Nullable<Double>> MyNullableSuperStruct;
    }
}
5
задан Gabe 17 April 2012 в 19:06
поделиться