TL; DR В языке Delphi такого оператора нет, и я не думаю, что он появится в ближайшее время. Но есть несколько хороших методов решения этой проблемы. Подробнее ...
Давайте начнем с нижней части вашего вопроса.
Как я знаю, в CSharp существует оператор ?
для использования like
ASomeObj?.Session?.UserInfo?.SomeFactsList
для проверки by null
Прежде всего, в C# нет оператора ?
, но есть такие, в которых есть ?
:
Вы, очевидно, имели в виду ?.
aka оператор безопасной навигации или даже
Такого оператора нет в Delphi язык, и я не думаю, что мы его получим в ближайшее время, учитывая, что еще нет даже истинного тернарного условного оператора:
- RSP-12100 : Добавить тернарный оператор на Delphi язык
- RSP-14621 : Предлагаемый синтаксис для тернарного оператора
Вы не единственный, кто это просит - есть открытый запрос функции добавить поддержку для условный оператор null (RSP-21323) .
FWIW: язык Oxygene от RemObjects Software (отказ от ответственности: нет отношения) имеет оператор двоеточия для этой цели.
* 1069. * Откуда мы go отсюда? Сначала я бы порекомендовал вам переосмыслить свой дизайн (как было указано в комментариях под вопросом).
Позвольте мне процитировать Просто скажи нет нулям (или рефакторингу своего пути к программисту) Bliss) :
Истина в том, что когда мы пробираемся через бесконечные иерархии объектов, подобные этой, возникает то, что мы называем запахом кода. И это довольно хороший признак того, что мы, возможно, захотим пересмотреть наш дизайн. Настоящий объектно-ориентированный дизайн состоит из хороших маленьких хорошо управляемых классов, которые предоставляют методы, которые мы можем использовать, чтобы они делали что-то за нас. Эти классы абстрагируют мельчайшие детали за кулисами и просто делают это (часто без необходимости вообще возвращать какое-либо значение).
dog.bark()
не dog.getAnatomy().getVoiceBox().EmitSound("woof")
Другой вариант - сделать промежуточные объекты не nil
, используя шаблон объекта Null . Это поможет вам избавиться от цепных проверок Assigned
.
Дешевым и грязным решением было бы ввести сокращенное свойство SomeFactsList
или помощник класса непосредственно на ASomeObj
, чтобы, по крайней мере, вам не нужно было повторять
Для дальнейшего чтения: