А, как вам такой метод расширения:Вильдар, изящно! Я бы, правда, по-другому бы сделал - не люблю объёмные лямбда-выражения:
Жесть. Такой изврат ради того, чтоб не писать tr.Commit () ?! Вы серьезно считаете что это проще? Или я живу в другой вселенной....Ты не прав. Когда нужно чтобы в любом случае выполнился Commit с учетом всех возможных исключений - это идеальный вариант.
Жесть. Такой изврат ради того, чтоб не писать tr.Commit () ?! Вы серьезно считаете что это проще? Или я живу в другой вселенной....Ну да. Голова не болит - поставил я Commit или нет? Иногда, например, если полученный объект не соответствует критериям, то ставишь return и выходишь из метода задолго до конца блока using транзакции. В этом случае надо тоже не забыть перед return Commit сделать. А таких мест может быть несколько, нужно держать в голове всё время эту особенность с Commit, концентрироваться на этом. А вот такие вот "извраты" позволяют меньше уделять внимания этим мелочам и больше концентрироваться на непосредственно реализации задачи. Можно сказать, что эти "извраты" - это обёртки, позволяющий сгладить некоторые огрехи AutoCAD API. Со временем, таких обёрток довольно много набирается. Методы со встроенными проверками. Методы, которые учитывают различные особенности, с которыми столкнулся в прошлом. Методы, которые просто упрощают взаимодействие с API. И т.п. Посади меня сейчас писать приложение "с нуля" без использования моих вспомогательных библиотек - я буду себя чувствовать крайне неуютно.
Но, потом убрал, т.к. при исключениях все равно будет вызван Commit(), мне кажется это не хорошо.Возможно. Как-то даже не задумывался об этом. А при исключении не всё равно что в итоге будет: Commit или Abort? У меня обычно с высокой вероятностью далее будет Fatal Error :)
А вот подменять дефолтное поведение на любое свое - это отличный способ подложить себе грабли на будущее.А где тут подмена? В варианте от Вильдара всё работает точно так же, как если бы не использовался вспомогательный метод. В моём, с учётом замечания Вильдара, возможно что нет. Если это критично - значит пользуемся его вариантом.
не завидую тем, кому придется дописывать что-то на базе вашего кода с такими "улучшайзерами"А в чём проблема? Заглянуть в определение метода расширения и понять как он работает - дело пары минут. Думаю, что наоборот даже - можно позавидовать. Человек увидит, как можно легко упростить себе жизнь использованием таких обёрток и возьмёт себе на вооружение.
это как перегрузить == на !=По мне - это совсем неподходящее сравнение. В данном случае логика работы никак не подменяется на противоположную, просто объединяются несколько операций в одну.