Я обычно использовал методы расширения для такого рода вещей, очень похожие на то, на что указывает AakashM. Хорошим примером этого является строка ДЛИНА. Поскольку функция LENGTH является методом экземпляра, если вы вызовете ее для объекта с нулевой строкой, вы выбросите ее.
Но закодируйте метод расширения LEN в строковом классе, который проверяет на нулевое значение, и вы можете получить его возвращающим 0 (я считаю, что длина нулевых строк равна 0 практически все время, но это тема для другого потока.)
Используя ту же логику, вы можете реализовать IsNotNull или, возможно, IsValid. основной проблемой будет «остановка» продолжения разрешения свойства (скажем, от случая к плану)
методы в вышеупомянутом потоке используют Lambdas, который выдает довольно громоздкий синтаксис, если вы спросите меня. Я подозреваю, что было бы возможно, если бы тест IsNotNull дал ноль, вернуть объект Proxy, который заменяет нуль, и просто разрешил бы любой вызов метода, который вы делаете для него, также нулевым. Но для этого потребуется динамический прокси, который сам по себе грязный.