2016-06-16 1 views

ответ

7

Ну ?. является нуль-условный оператор

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))) 
1

Он будет проверять, если «помощник» не до того acessing «Настройки» свойства, чтобы избежать NullReferenceException NULL. https://msdn.microsoft.com/en-us/library/dn986595.aspx «Старый» способ был таким: if (helper! = Null & &! Helper.Settings ......).

4

Проверить 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 будет иметь место.

2

?. Оператор известен как 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.

Это основы. Сила этой функции исходит из всех сценариев, где эта функция позволяет использовать более чистый код.

+0

приятное объяснение ... –