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
    }

   }

questionAnswers(6)

yourAnswerToTheQuestion