Что значит "?"после переменной в C#?
что это значит?
if (!helper?.Settings.HasConfig ?? false)
П. С.
-
helper
переменной некоторого класса -
Settings
- это какое-то поле -
HasConfig
- это поле тоже
4 ответов
Ну ?.
это null-conditional оператор
https://msdn.microsoft.com/en-us/library/dn986595.aspx
x?.y
означает возвращение null
если x
null и x.y
иначе
??
это нуль-коалесцирующий оператор
https://msdn.microsoft.com/en-us/library/ms173224.aspx
x ?? y
означает, что если x == null
вернуться y
, иначе x
объединение всего вышеперечисленного
helper?.Settings.HasConfig ?? false
означает: возвращение false
если
helper == null or
helper.Settings.HasConfig == null
в противном случае return
helper.Settings.HasConfig
код без ??
и ?.
if
можно переписать в громоздким
if (!(helper == null
? false
: (helper.Settings.HasConfig == null
? false
: helper.Settings.HasConfig)))
Регистрация список операторов C#:
x?.г – нуль-условный доступ-членов. Возвращает null, если левый операнд равен null.
x ?? y-возвращает x, если он не равен null; в противном случае возвращает y.
так helper?.Settings
вернет значение null, если helper
равно null, иначе он вернет helper.Settings
если helper.Settings
не равно null и helper.Settings.HasConfig
не равно null, тогда он вернет значение helper.Settings.HasConfig
в противном случае возвратит false.
Н. Б: если helper?.Settings
равно null, тогда произойдет исключение нулевой ссылки.
?.
оператор известен как safe navigation operator
введено в C# 6.
Синтаксис Условного Оператора Null
нулевой условный оператор (?.) в просторечии называется "Elvis operator"
из-за его сходства с парой темных глаз под большим пучком волос. Условное значение null является формой оператора доступа к члену (the .). Вот упрощенное объяснение нулевого условного оператора:
выражение A?.B
значение B
если левый операнд (A) не равен нулю; в противном случае он вычисляет tonull.
многие другие детали полностью определяют поведение:
тип выражения A?.B-тип B, в случаях, когда B ссылочный тип. Если B-тип значения, то выражение A?.Б тип nullable, который обертывает базовый тип значения, представленный B.
спецификация для функций мандатов, которые должны быть оценены нет!--35--> не раз.
нулевой условный оператор короткого замыкания, что означает, что вы
может цепь множественная ?.операторы, зная, что первый null
обнаружено предотвращает оставшиеся (самые правые) компоненты
выражение из оцениваемого.
Пример: - Предположим, у нас есть класс
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
предположим, что s представляет ученика. Рассмотрим эти два заявления:
var name = s?.FirstName;
var age = s?.Age;
имя переменной-это строка. Значение name зависит от значения s
. Если s
равно null, name равно null. Если s
Не равно null, name-это значение s.FirstName
. Обратите внимание, что s.FirstName
может быть null, даже если s
нет.
переменный возраст -int?
(что является еще одним способом указания Nullable). Как и в случае с именем, значение возраста зависит от значения s
. Если s null
, возраст int?
не имеет значения. Если s не равно null, age-это обернутое значение s.Age
.
это азы. Сила этой функции исходит из всех сценариев, где эта функция включает более чистый код.
он проверит, не является ли" helper "нулевым перед использованием свойства" Settings", чтобы избежать исключения NullReferenceException. https://msdn.microsoft.com/en-us/library/dn986595.aspx "Старый" способ был таков :если (помощник != null && !помощник.Настройки......).