В общем, интереса ради залез в исходники Nullable<T>
и увидел вот такое:
public static implicit operator Nullable<T>(T value) {
return new Nullable<T>(value);
}
internal T value;
public Nullable(T value) {
this.value = value;
this.hasValue = true;
}
Я же правильно понимаю, что CLR сама как-то особенно работает с этим типом? Так как иначе я не понимаю, как оно работает в этом случае:
float? nullabe=null
По логике null должен передастся в конструктор и пристроится типу T, который из себя представляет значимый тип => падение.
В данном случае, CLR тут ни при чём, это компилятор видит что ожидается тип Nullable<float>
и сам подставляет default-значение вместо null. И особое поведение операторов is/as
точно так же реализуется компилятором.
Однако, Nullable<>
- и правда особенный для CLR тип. Его особенностью является тот факт, что вы никогда не увидите его упакованную версию:
int? i = 5;
object o = i;
Console.WriteLine(o.GetType()); // System.Int32
int j = (int)o; // работает
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Стоит задача : при инициализации выполняется заполнение ObservableCollection данными, где имеется трудоемкий метод
Заранее прошу прощения за невнятный заголовок, не придумал как лучше объяснить
При попытке запуска какой-либо программы через VS выдает такую ошибкуРаньше этого не было, но после обновления ОС на Mac'е началось