
C#
C#.Что за значение NULL?Что не так?

IDE тебе как бы подсказывает, что возможен такой вариант, что какой-то значимой переменной (допустим int), которая по умолчанию NULL-ом быть не может, присвоится NULL. В таком случае программа умрет нафиг и скажет "InvalidOperationException".
NULL - это пустое значение. Значимые переменные в C# должны иметь какое-либо значение, не NULL. Но, если ставить знак вопроса "?" после типа переменной (например int? a), то NULL будет возможен.
Поэтому такое (код ниже) даже не скомпилируется, т.к. компилятор не знает каким образом перевести тип из int? в int (да так, чтобы при этом не убить всё):
Вот это скомпилируется:
Но! Если окажется, что "a" на самом деле NULL, то программа аварийно завершится.
Лучше проверять так:
Дополнительно можешь почитать тут: https://metanit.com/sharp/tutorial/2.17.php
NULL - это пустое значение. Значимые переменные в C# должны иметь какое-либо значение, не NULL. Но, если ставить знак вопроса "?" после типа переменной (например int? a), то NULL будет возможен.
Поэтому такое (код ниже) даже не скомпилируется, т.к. компилятор не знает каким образом перевести тип из int? в int (да так, чтобы при этом не убить всё):
int? a = null;
int b = a;
*Компилятор не дает запустить, грустно..*
Однако, можно ему приказать наглухо просто изменить тип, называется "явное преобразование".Вот это скомпилируется:
int? a = 5;
int b = (int) a;
*Все хорошо, b == 5*
И вроде бы все хорошо, переменной b действительно установится значение 5.Но! Если окажется, что "a" на самом деле NULL, то программа аварийно завершится.
int? a = null;
int b = (int) a;
*Все умерло, мир прогнил и не осталось ничего кроме страданий*
Поэтому так (как выше) делать не надо.Лучше проверять так:
int? a = null;
int b = a ?? 0;
*b == 0, круто, мир спасён*
Тут, короче, если "a" не null, то "b" присвоит значение "a". А если "a" == null, то будет установлено значение справа от оператора "??". В данном случае "b" станет = 0. Я C# не так уж хорошо знаю, так что наверняка есть ещё много чего.Дополнительно можешь почитать тут: https://metanit.com/sharp/tutorial/2.17.php
Даниил Фалькенберг
Если не поймешь что тут написано, то это абсолютно нормально. Я только сейчас прочитал, что ты только изучил циклы.
Даниил Фалькенберг
Так что не заостряй пока на этом внимание и учи более полезные для тебя темы.
А тыкнуть на ссылку CS8600 для подробностей религия не позволяет??
где-то конвертируешь нульвозможный (int? double? MyClass? string? ) тип в обычный(int, double , string... ). иногда это может привести к исключениям.
где-то конвертируешь нульвозможный (int? double? MyClass? string? ) тип в обычный(int, double , string... ). иногда это может привести к исключениям.
Apz Otdel
А чем плоха для кода эта ошибка?
Убери 0
Apz Otdel
От куда?
Похожие вопросы
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#
- Python, C, C++, C#, Что выбрать-то?
- Помогите разобраться с заданием! C#
- Стоит ли изучать c# в 13 лет?
- Нужна помощь с задачей C#