Что означает это условие?Что значит "?" после переменной в C#?
if (!helper?.Settings.HasConfig ?? false)
P.S.
helper
является переменной некоторого классаSettings
является некоторое полеHasConfig
это поле слишком
Что означает это условие?Что значит "?" после переменной в C#?
if (!helper?.Settings.HasConfig ?? false)
P.S.
helper
является переменной некоторого классаSettings
является некоторое полеHasConfig
это поле слишкомНу ?.
является нуль-условный оператор
https://msdn.microsoft.com/en-us/library/dn986595.aspx
х? .y
средство возврата null
если x
является недействительным и 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
иначе вернуть
helper.Settings.HasConfig
код без ??
и ?.
if
можно переписать в громоздкой
if (!(helper == null
? false
: (helper.Settings.HasConfig == null
? false
: helper.Settings.HasConfig)))
Он будет проверять, если «помощник» не до того acessing «Настройки» свойства, чтобы избежать NullReferenceException NULL. https://msdn.microsoft.com/en-us/library/dn986595.aspx «Старый» способ был таким: if (helper! = Null & &! Helper.Settings ......).
Проверить C# operator list:
х .y - нуль условного доступа член. Возвращает значение null, если левый операнд имеет значение null.
x ?? y - возвращает x, если он не равен нулю; в противном случае возвращает y.
helper?.Settings
Так будет возвращать нулевое значение, если helper
равно нулю в противном случае он будет возвращать helper.Settings
если helper.Settings
не утратившим helper.Settings.HasConfig
не равно нулю, то он возвращает значение helper.Settings.HasConfig
в противном случае вернет ложь.
N.B: если helper?.Settings
имеет значение null, то исключение ссылки NULL будет иметь место.
?.
Оператор известен как safe navigation operator
введенных в C# 6. Нуль условного оператора Синтаксис
Условный оператор нуля (?.) Разговорно называют "Elvis operator"
из-за его сходство с парой темных глаз под большим волосом. Нулевым условием является форма оператора доступа к члену (.). Вот упрощенное объяснение оператора нулевого условия:
Выражение A?.B
вычисляет B
, если левый операнд (A) не равен нулю; в противном случае он оценивает тональму.
Многие другие детали полностью определяют поведение:
тип выражения A .B тип В, в тех случаях, когда B является ссылочного типа. Если B является типом значения, выражение А? .B является обнуляемым типа, который оборачивает тип базового значения, представленного B.
В спецификации для функции мандатов, что A не быть оценен не
более чем один раз.
Нулевые условный оператор короткого замыкания, что означает, что вы
может, цепь множественного? .operators, зная, что первый нуль
встречается предотвращает оставшиеся (самый правый) компоненты выражения
от оцениваемого.
Пример: - Предположим, у нас есть класс Student
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;
Имя переменной - это строка. Значение имени зависит от значения s
. Если s
имеет значение null, имя равно null. Если s
не является нулевым, имя - это значение s.FirstName
. Обратите внимание, что s.FirstName
может быть нулевым, даже если s
не является.
Переменный возраст - int?
(что является другим способом указания Nullable). Как и имя, значение возраста зависит от значения s
. Если s - null
, возраст - int?
без значения. Если s не является нулевым, возраст - это завернутое значение s.Age
.
Это основы. Сила этой функции исходит из всех сценариев, где эта функция позволяет использовать более чистый код.
приятное объяснение ... –