Предположим, у меня есть довольно глубокий класс, и мне нужно глубоко внедрить какое-то поле.
int? result = this.child.button.data;
return result;
И в любой момент он может указывать на ноль, и в этом случае я также хочу вернуть ноль. Общим подходом было бы
if (this.child != null && this.child.button!= null) {
return this.child.button.data;
} else {
return null;
}
Но если поле ДЕЙСТВИТЕЛЬНО глубоко вложено, то единственное решение, которое я могу придумать, это:
int? result = null;
try {
result = this.child.button.handler.controller.renderer.data;
} catch (NullReferenceException ex) {
// Do nothing here
}
Это правильный подход или есть лучшее решение?
вы можете проверить нулевой условный оператор в С# - ?. Нравиться:
result = this?.child?.button?.handler?.controller?.renderer?.data;
на самом деле это называется "нулевой условный оператор"
технически это "нулевой условный" оператор. Я не верю, что есть что-то, что называется оператором "безопасной навигации".
Нет, просто используйте условный оператор null, например
this?.child?.button.handler.controller?.renderer?.data
. Он будет проверяться на наличие нулей везде, где есть ? есть, и если какая-либо часть выражения приводит к нулю, то таким же будет и результат