В этой статье я не буду открывать Америку — материалов про паттерн Result на любом языке очень много. Но он мне очень понравился, так что я решил поделиться им и с вами, уважаемые подписчики, и конечно же, как и всегда, в контексте Revit API. Это классический вариант управления потоком в C# и в Revit API тоже. Давайте рассмотрим его на примерах:
Пример 1. У нас есть 2 линии, нам надо найти точку их пересечения. Написать метод, который принимает на вход 2 Line, возвращает XYZ. Метод будет выглядеть, допустим, так: Давайте посмотрим на поток выполнения: 1. Мы проверяем, не параллельны ли линии, и если да, кидаем исключение. 2. Если линии не параллельны, то мы возвращаем точку пересечения (как именно, нам сейчас всё равно). Теперь давайте представим, что это метод из сторонней библиотеки. Что мы видим: сигнатура метода обещает нам, что вернёт XYZ. Реальность такова, что метод может кинуть исключение и ничего не вернуть. Сторонний API нас обманывает. Пример 2: создадим пол через Revit API