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
}
}