Что значит "?"после переменной в 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 && !помощник.Настройки......).