Что означает х?.да?.з значит?
проект спецификации для сопоставление шаблонов в 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 ответа:
имейте в виду, что эта функция языка доступна только в 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