#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; // работает
Комментариев нет:
Отправить комментарий