В Visual Basic я написал только On Error Resume Next
в начале моей программы, и ошибки были подавлены во всем проекте.
Здесь, в С#, я очень скучаю по этой функции. Обычная обработка try-catch
для каждой отдельной процедуры не только очень трудоемкая, но и приводит к нежелательным эффектам. Если ошибка встречается, даже если она обрабатывается, код не продолжается с точки, в которой он произошел. С On Error Resume Next
код продолжался с точки ошибки, пропуская только вызов функции, вызвавший ошибку.
Я пока еще не занимаюсь С#, но, возможно, в С# существует более эффективная обработка ошибок, чем примитив try-catch
.
Я также хотел бы иметь имя модуля или функции, где произошла ошибка, а также номер строки в моем сообщении об ошибке. Класс Exception
не предоставляет этих функций, насколько мне известно. Любые идеи (управляемые, конечно, без привлечения классов процессов в моем собственном приложении)?
Как вы обрабатываете ошибки в больших проектах? Надеюсь, мне не нужно добавлять try-catch
к каждому методу. Как-то С# выдает много ошибок - это кажется типичным для языка.
Мое решение, которое я нашел, чтобы решить несколько из моих проблем:
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
}
}