Почему я не могу поймать универсальное исключение в C#?

Глядя на предоставленную ссылку Java, более половины ее уже давно устарели :)

У вас есть инструменты PDF и PDF-формат документов сейчас. Есть инструменты и многое другое на его путь, от boostbook для авторов библиотек давным-давно до синопсиса и т. д. Соберите свою собственную или проанализируйте существующее большинство затрат на разметку в уже раздутый проект:)

40
задан Einar Egilsson 20 July 2011 в 12:57
поделиться

3 ответа

Bizarre behavior here...

VS2k8 console app. The following:

try
{
    throw new T();
}
catch (T tex)
{
    Console.WriteLine("Caught passed in exception type");
}
catch (Exception ex)
{
    Console.WriteLine("Caught general exception");
}

results in "Caught general exception".

But, remove the (useless) variables from the catch statements:

try
{
    throw new T();
}
catch (T)
{
    Console.WriteLine("Caught passed in exception type");
}
catch (Exception)
{
    Console.WriteLine("Caught general exception");
}

results in "Caught passed in exception type"!!!


Update:

Heheh... Its a bug: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=362422&wa=wsignin1.0

Source? Here. Why does catch(TException) handling block behaviour differ under the debugger after installing Visual Studio 2008?

34
ответ дан 27 November 2019 в 01:53
поделиться

Казалось бы, наиболее конкретным типом исключения, когда предоставляется выбор между T и Exception, является исключение, и поэтому вызывается этот обработчик.

Я только что попробовал это (вы не могу сделать это на C # или VB, но я отредактировал IL) и изменил второе предложение catch, чтобы перехватить Object Ex, а не Exception Ex, и в этом случае попадал первый обработчик.

Edit

Как отмечали другие, это больше связано с запуском его в отладчике, чем с конкретным типом

2
ответ дан 27 November 2019 в 01:53
поделиться

It works without Debug

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/0b0e5bc9-fab2-45b1-863b-40abae370475

Ugly workaround (you may add #if DEBUG) :

  try
  {
    throw new T();
  }
  catch (Exception dbgEx)
  {
    T ex = dbgEx as T;
    if (ex != null)
    {
      Console.WriteLine(ex.Message);
    }
  }
8
ответ дан 27 November 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: