Исключение - PullRequest
       17

Исключение

11 голосов
/ 16 марта 2010

В C # выдает ли следующий код e, содержащий дополнительную информацию, в стек вызовов?

...
catch(Exception e)
{
  e.Data.Add("Additional information","blah blah");
  throw;
}

Ответы [ 4 ]

12 голосов
/ 16 марта 2010

Да, будет. Многие разработчики не понимают, что следующий код вызовет новое исключение из этой точки в стеке вызовов, а не вызовы, сделанные ранее в стеке до catch.

...
catch(Exception e)
{
  e.Data.Add("Additional information","blah blah");
  throw e;
}

Я научился этому нелегко!

4 голосов
/ 16 марта 2010
        var answer = "No";
        try
        {
            try
            {
                throw new Exception();
            }
            catch (Exception e)
            {
                e.Data.Add("mykey", "myvalue");
                throw;
            }
        }
        catch (Exception e)
        {
            if((string)e.Data["mykey"] == "myvalue")
                answer = "Yes";
        }

        Console.WriteLine(answer);
        Console.ReadLine();     

Когда вы запустите код, вы обнаружите, что ответ - да: -)

1 голос
/ 16 марта 2010

Вы можете сделать это, но благодаря FxCop я всегда создавал пользовательские исключения, когда бы я ни выдавал, и исключение. Это дает вызывающей стороне возможность легко ловить и понимать различные типы ошибок. Если вам нужно включить последующее исключение, вы можете использовать InnerException of Exception или просто объявить переменную-член для вашего нового Exception.

Это говорит вам, как сделать себя успешным. http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/

Это одна из тех программных вещей, которую людям нравится пропускать, потому что это просто дополнительная работа, чтобы получить функционал приложения.

Это страница из моего личного дзен программирования:

Ваша программа - ваш дом. Сделайте это как можно лучше, чтобы в нем было легко и весело жить.

1 голос
/ 16 марта 2010

Исключения не являются неизменными, и возможность добавления к ним информации является одной из причин этого.

Итак, да, данные будут добавлены к информации об исключении, всплывающей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...