Что означает х?.да?.з значит?


проект спецификации для сопоставление шаблонов в C# содержит следующий пример кода:

Type? v = x?.y?.z; 
if (v.HasValue) {
    var value = v.GetValueOrDefault();     
    // code using value 
} 

Я понимаю, что Type? указывает, что Type допускает, но при условии x,y и z местные жители, что значит x?.y?.z в смысле?

3 70

3 ответа:

имейте в виду, что эта функция языка доступна только в C# 6 и более поздних версиях.

Это фактически эквивалент:

x == null ? null
   : x.y == null ? null
   : x.y.z

иными словами, это "безопасный" способ сделать x.y.z, где любое из свойств по пути может быть null.

также является оператор коалесценции null (??), который предоставляет значения для замены null.

это распространения null оператор / оператор ?. новая предлагаемая функция в C# 6.0

x?.y?.z означает

  • во-первых, проверить, если x не является нулем, то Регистрацияy в противном случае возвращает значение null,
  • во-вторых, когда x не является нулем, то проверьте y, если это не null тогда возврат z в противном случае возвращает значение null.

конечное возвращаемое значение будет z или null.

без этого оператора if x равно null, затем доступ x.y вызовет исключение Null Reference, оператор null-Conditional помогает избежать явной проверки на null.

это способ избежать исключения нулевой ссылки.

посмотреть: получение представления о предстоящих функциях языка в C#

8 - нуль-условные операторы

иногда код имеет тенденцию немного утонуть в нулевой проверке. Этот оператор null-conditional позволяет получить доступ только к членам и элементам когда получатель не-null, обеспечивая нулевой результат в противном случае:

int? length = customers?.Length; // null if customers is null
 this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();

в основном.