Nesta dica vou mostrar como podemos obter a exceção mais interna, e, em muitos casos, a raiz do problema quando a exceção foi lançada. |
O método GetBaseException() da classe Exception exibe informações somente sobre a exceção mais interna (original); nenhuma outra informação de exceção é exibida. Este método não aceita parâmetros.
Ex: Console. WriteLine (ex.GetBaseException().ToString
());
Chamando o método
GetBaseException().ToString() em um objeto Exception que contém
uma exceção interna vai gerar a mesma informação sobre o erro como se
tivéssemos usado o método ToString() diretamente na exceção interna.
Este
método egue a cadeia de exceções usando a InnerException e para
quando chega à exceção mais interna.
Nesta dica vou mostrar como você pode obter a exceção original lançada
descartando todas as demais exceção para assim obter a raiz do problema.
Recursos Usados
Criando o projeto Console Application
Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Console Applicaiton.
Informe um nome a seu gosto. Eu vou usar o nome C_InnerException;
A seguir defina o seguinte código na classe Program.cs :
using System;
namespace C_InnerException
{
class Program
{
static void Main(string[] args)
{
Exception maisInterna = new Exception("A exceção maisInterna.");
ArgumentException interna = new ArgumentException("A Exception interna.",maisInterna);
NullReferenceException se = new NullReferenceException("Macoratti .net - Quase tudo para .Net", interna);
try
{
throw (se);
}
catch(Exception ex)
{
Console.WriteLine("** Main() ApplicationException:");
Console.WriteLine(" Exception Base : ");
Console.WriteLine(" {0}", ex.GetBaseException().ToString());
Console.ReadKey();
}
}
}
}
|
Executando o projeto iremos obter:
Observe que nenhuma exceção que não seja a exceção maisInterna é exibida.
Uma comparação com um tratamento usando o código abaixo:
try
{
throw (se);
}
catch(Exception ex)
{
Console.WriteLine("** Main() ApplicationException:");
Console.WriteLine(" {0}", ex.Message);
Console.WriteLine(" {0}", ex.InnerException.Message);
Console.WriteLine(" Exception Base : ");
Console.WriteLine(" {0}", ex.GetBaseException().ToString());
Console.ReadKey();
}
|
Mostra a diferença do resultado obtido.
Dessa forma esta técnica é útil para chegar na raiz do problema durante a
filtragem de todas as demais exceções.
(Disse Jesus) - 'Aquele que tem os
meus mandamentos e os guarda esse é o que me ama; e aquele que me ama será
amado de meu Pai, e eu o amarei, e me manifestarei a ele.'
João 14:21
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - 10 dicas para aumentar sua produtividade - Macoratti.net
C# - 5 Dicas para incrementar o desempenho do seu ... - Macoratti.net
Visual C# 6.0 - Novidades da nova versão ... - Macoratti.net