Brakuje „On Error Resume Next” w języku Visual Basic w C #. Jak mam teraz przekazywać błędy?

W Visual Basic napisałem właśnieOn Error Resume Next w głowie mojego programu i błędy zostały stłumione w całym projekcie.

Tutaj w C # bardzo tęsknię za tą funkcją. Zwykłytry-catch obsługa każdej procedury jest nie tylko bardzo czasochłonna, ale powoduje niepożądane efekty. Jeśli wystąpi błąd, nawet jeśli zostanie obsłużony, kod niedalej od momentu, w którym to nastąpiło. ZOn Error Resume Next, kod był kontynuowany z punktu błędu, pomijając tylko wywołanie funkcji, które spowodowało błąd.

Nie jestem jeszcze głęboko związany z C #, ale może istnieje w C # lepsza obsługa błędów niż prymitywtry-catch.

Chciałbym również, aby moduł lub nazwa funkcji zawierała błąd, a także numer linii w moim komunikacie o błędzie. TheException klasa nie zapewnia takich funkcji, jakie znam. Jakieś pomysły (oczywiście zarządzane, bez angażowania żadnych klas procesów w mojej aplikacji)?

Jak radzisz sobie z błędami w większych projektach? Mam nadzieję, że nie muszę dodawaćtry-catch do każdej metody. Jakoś C # rzuca wiele błędów - to wydaje się być typowe dla języka.

Moje rozwiązanie, które znalazłem, aby rozwiązać kilka moich problemów:

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