Я скучаю по Visual Basic «Возобновить дальше при ошибке» в C #. Как мне теперь обрабатывать ошибки?

В Visual Basic я написал только On Error Resume Nextв заголовке своей программы, и ошибки были подавлены во всем проекте.

Здесь, в C #, мне очень не хватает этой функции. Обычная try-catchобработка каждой отдельной процедуры не только занимает очень -много времени, но и приводит к нежелательным эффектам. При обнаружении ошибки, даже если она обработана, код не продолжает с того места, где она произошла. В On Error Resume Nextкод продолжался с места ошибки, пропуская только вызов функции, вызвавший ошибку.

Я еще не очень хорошо знаком с C #, но, возможно, в C #существует лучшая обработка ошибок, чем в примитиве try-catch.

Я также хотел бы иметь имя модуля или функции, в котором произошла ошибка, а также номер строки в моем сообщении об ошибке. Насколько мне известно, класс Exceptionне предоставляет таких функций. Какие-нибудь идеи (, реализованные, конечно, без использования каких-либо классов процессов в моем собственном приложении )?

Как вы справляетесь с ошибками в больших проектах? Надеюсь, мне не нужно добавлять try-catchк каждому методу. Каким-то образом C #выдает много ошибок -, которые кажутся типичными для этого языка.

Мое решение, которое я нашел, чтобы повторно -решить несколько моих проблем:

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
    }

   }
13
задан feedwall 25 July 2012 в 18:46
поделиться