Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Nullable- это больше, чем структура?

#c_sharp #net


В общем, интереса ради залез в исходники Nullable и увидел вот такое:

public static implicit operator Nullable(T value) {
    return new Nullable(value);
}
internal T value;

    public Nullable(T value) {
        this.value = value;
        this.hasValue = true;
    }       


Я же правильно понимаю, что CLR сама как-то особенно работает с этим типом?
Так как иначе я не понимаю, как оно работает в этом случае:

float? nullabe=null


По логике null должен передастся в конструктор и пристроится типу T, который из себя
представляет значимый тип => падение.
    


Ответы

Ответ 1



В данном случае, CLR тут ни при чём, это компилятор видит что ожидается тип Nullable и сам подставляет default-значение вместо null. И особое поведение операторов is/as точно так же реализуется компилятором. Однако, Nullable<> - и правда особенный для CLR тип. Его особенностью является тот факт, что вы никогда не увидите его упакованную версию: int? i = 5; object o = i; Console.WriteLine(o.GetType()); // System.Int32 int j = (int)o; // работает

Комментариев нет:

Отправить комментарий