C#

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

Apz Otdel
Apz Otdel
573
IDE тебе как бы подсказывает, что возможен такой вариант, что какой-то значимой переменной (допустим int), которая по умолчанию NULL-ом быть не может, присвоится NULL. В таком случае программа умрет нафиг и скажет "InvalidOperationException".
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
Даниил Фалькенберг
Даниил Фалькенберг
6 952
Лучший ответ
Даниил Фалькенберг Если не поймешь что тут написано, то это абсолютно нормально. Я только сейчас прочитал, что ты только изучил циклы.
Даниил Фалькенберг Так что не заостряй пока на этом внимание и учи более полезные для тебя темы.
А тыкнуть на ссылку CS8600 для подробностей религия не позволяет??

где-то конвертируешь нульвозможный (int? double? MyClass? string? ) тип в обычный(int, double , string... ). иногда это может привести к исключениям.
Игорь Исаков
Игорь Исаков
10 596
Apz Otdel А чем плоха для кода эта ошибка?
Убери 0
Apz Otdel От куда?