Почему я могу присвоить значение null для Типа типа "struct Nullable <T>", но не для моей структуры? - PullRequest
0 голосов
/ 10 мая 2018

Я знаю механизм для типов значений Nullable.Однако меня интересует следующее:

Типы значений Nullable работают со структурой (с https://referencesource.microsoft.com/#mscorlib/system/nullable.cs,ffebe438fd9cbf0e)

public struct Nullable<T> where T : struct {
    public Nullable(T value) {
        /* ... */
    }

    public bool HasValue {get;}

    public T Value {get;}
}

Я могу использовать это как

Nullable<int> i = null;

Теперь я создаю свою собственную Nullable-Struct таким же образом:

public struct MyNullable<T> where T : struct {
    public MyNullable(T value) {
        /* ... */
    }

    public bool HasValue {get;}

    public T Value {get;}
}

Почему я не могу сделать

MyNullable<int> i = null;

сейчас?

Я знаю, чтозначения struct не могут быть нулевыми, но почему значение struct Nullable может быть нулевым? Где механизм, который позволяет это?

1 Ответ

0 голосов
/ 10 мая 2018

Где механизм, который позволяет это?

В самом компиляторе C #. Nullable<T> - это особый тип с множеством дополнительных правил, включая способ обработки null (сравнение и назначение) и способ обработки операторов (см. «Операторы с повышенным уровнем»).

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1012* * 1012 '*1012*' Nullable<T>.

Вы не можете эмулировать Nullable<T> в своем собственном коде из-за этих специальных правил, которые вы не можете выразить.

...