Комментарии 13
Обмазываем всё приложение отключением валидации/бойлерплей кодом
Зачем обмазывать все - достаточно только public API.
А что не так с вашим "утрированием"? nullable позволяет выбросить наконец надоевшую валидацию по всему коду, бесконечные Guard.NotNull
и прочие NRE на продуктиве.
Добавляется не пара процентов, а все 100% гарантии отсутствия null
/NRE при условии, что вы этот nullable, конечно же, умеете готовить.
Я просто очень много видел людей, которые вставляют восклицательный знак то тут то там, а потом кричат, что nullable — фигня полная.
Практика "never null" хороша в попытке решить вышеуказанные проблемы (когда нет альтернативы в виде nullable context), но лишает возможности использовать null как инструмент в принципе, а это уже минус. Доп. минусом сюда идёт в комплекте то, что любой рандомный разраб всегда может случайно вернуть этот null
куда не следует, и всё, считай, на смарку. Только потом еще есть шанс не найти этого места.
Используя оператор '!', мы "говорим" компилятору о том, что метод точно не вернёт null. Следовательно, предупреждений на данный участок кода не будет.
Следовало бы упомянуть, что использование ! для подавления предупреждения - плохая практика и так делать не стоит
object? GetPotentialNull(bool flag)
{
return flag ? null : new object();
}
В примере кода из статьи второй знак вопроса после flag, это тернарный оператор или тоже nullable тип?
Тернарный оператор
Тогда это ... ну очень своеобразный и совсем не очевидный синтаксис (и как хорошо, что мне на C# писать ничего не нужно).
Э-э-э, а что неочевидного-то в обычном тернарном операторе?
В самом тернарном операторе, как раз ничего, а вот одновременное использование ? в нескольких различных синтаксических конструкциях режет глаза. Особенно, когда они располагаются визуально очень близко.
Что только не придумают, лишь бы Option не вводить...
В Entity Framework Core созданная модель будет непосредственно зависеть от того указан или нет nullable reference type при включении поддержки nullable reference.
Это избавляет от необходимости каждый раз задавать IsRequired свойство в каждом EntityType и очень удобно.
Таким образом это как минимум один случай, когда правильное использование данной функции влияет непосредственно на код
Помоги компилятору, и он поможет тебе. Тонкости работы с nullable reference типами в C#