1. C# / Говнокод #9167

    +130

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    public static string Handle(System.Exception exception)
            {
                try
                {
                    throw exception;
                }
                catch (System.Net.WebException ex)
                {
                    ...
                }
                catch (System.Web.Services.Protocols.SoapHeaderException ex)
                {
                    ...
                }
                catch (System.Web.Services.Protocols.SoapException ex)
                {
                    ...
                }
                catch (ArgumentNullException ex)
                {
                    ...
                }
                catch (NullReferenceException ex)
                {
                    ...
                }
                catch (Exception ex)
                {
                    ...
                }
            }

    кусок кода в чужом проекте, который сейчас допиливаю :(

    Запостил: shtaff, 19 Января 2012

    Комментарии (12) RSS

    • Зарезервировали...
      Ответить
    • на все случаи жизни
      Ответить
    • Меня больше поразил способ обработки ошибки, всякое видел, а такого ещё не видел :)
      Ответить
    • Хм, вполне нормальный подход, если исключения надо ловить в нескольких местах и одинаково обрабатывать. В чем говнистость кода?
      Ответить
      • Разве не проще и красивее это было сделать через switch-case? Сам метод вызывается по событию возникновения ошибки у некоего обьекта. Ошибки в объекте появляются довольно часто, и объектов может крутиться одновременно несколько сотен, и такой подход, кроме всего другого, не очень хорошо влияет на производительность
        Ответить
        • Нука вызови switch, case для exception, это что-то новенькое, хочется взглянуть.
          Тема очень холиварная, возрат кода ошибок vs исключения, поэтому не будем обсуждать.
          Если этот код испльзуется в нескольких местах, то это нормальный код, так как каждый раз не пишешь портянку из catch, читается и понимается проще.

          А те кто до этого ответил похоже исключения с иерархией и нормальной обработкое не встречали в своих проектах.

          Так что код нормальный и этот подход можно брать на вооружение при соблюдении условий, исключений несколько, их надо однотипно обрабатывать и это нужно делать в нескольких местах.
          Ответить
          • Согласен, что тема холиварная.
            Лично мне не нравится очень этот подход ещё и тем, что при отладке нереально увидеть настоящее место генерации исключения, всегда указывает на строку с throw exception, я переделал на switch (exception.GetType().ToString())
            В кейсах полностью уточнённые названия классов, и ничего, работает, а немного ускорилось даже.
            Ответить
            • Ну если ты используешь такой же подход просто по другому выглядящий то не понимаю с чем не согласен.
              Настрой отладчик (Debug\Exceptions) чтобы отлавливал исключения в месте выброса и не мучайся.
              А так exception filter не только в С# применяется и я ничего говнистого в этом подходе не вижу.
              Ответить
              • Подходы отличаются, но ладно, всё равно никто никому ничего не докажет :)
                Ответить
      • ты вообще с возможностями языка знаком? коль нужен такой метод, то должен выглядеть он так:

        public static string Handle(System.Exception exception)
        {
        if (exception is System.Net.WebException)
        {
        ...
        }
        else if(exception is System.Web.Services.Protocols.SoapHeader Exception)
        {
        ...
        }

        ... и так далее. зачем повторно генерировать ошибку (это занимает МНОГО времени)??? надо проверять на соответствие классу ошибки.

        P.S. и, не мешало бы, неймспейсы объявлять, это существенно снижает объем кода :)
        Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий