Tenho saudades do Visual Basic "On Error Resume Next" em C #. Como devo estar entregando erros agora?
No Visual Basic eu escrevi apenasOn Error Resume Next
na cabeça do meu programa e os erros foram suprimidos em todo o projeto.
Aqui em C # eu sinto muita falta desse recurso. O habitualtry-catch
O manuseio para cada procedimento não é apenas muito demorado, mas traz efeitos indesejáveis. Se um erro for encontrado, mesmo se tratado, o código nãocontinuar do ponto em que ocorreu. ComOn Error Resume Next
, o código continuou do ponto de erro, pulando apenas a chamada de função que causou o erro.
Eu não estou profundamente envolvido com C # ainda, mas talvez exista em C # um melhor tratamento de erros do que o primitivotry-catch
.
Eu também gostaria de ter o nome do módulo ou função onde o erro ocorreu, bem como o número da linha na minha mensagem de erro. oException
A classe não fornece esses recursos até onde eu sei. Alguma idéia (gerenciada, é claro, sem envolver nenhuma classe de processo em meu próprio aplicativo)?
Como você lida com os erros em projetos maiores? Espero não ter que adicionar umtry-catch
para cada método. De alguma forma, o C # gera muitos erros - isso parece ser típico da linguagem.
Minha solução que encontrei para resolver vários dos meus problemas:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[STAThread]
static void Main()
{
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); //setup global error handler
Application.Run(new Form1());
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show("Unhandled exception: " + e.Exception.ToString()); //get all error information with line and procedure call
Environment.Exit(e.Exception.GetHashCode()); //return the error number to the system and exit the application
}
private void button1_Click(object sender, EventArgs e)
{
string s = ""; s.Substring(1, 5); //Produce an error
}
}