将每个方法包装在 try-catch 或代码的特定部分
Wrap every method in try-catch or specific part of code
我的资深同事告诉我将每个方法都包装在一个 try-catch 块中,这样他们就可以跟踪异常发生的位置,以帮助更快地调试问题。将每个方法包装在 Try Catch 中是否更好,例如:
Public int foo()
{
try
{
//do something
}catch(Exeception ex)
{
//do something with ex
}
}
还是在我认为可能发生的异常情况下捕获异常情况更好?例如。用数组做某事可能会导致 IndexOutOfRangeException
发生。
//wrap this in try catch
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
谢谢。
最好在代码的关键部分使用它,然后:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
ServerForm form = new ServerForm();
Application.Run(form);
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message, Program.Name);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show((e.ExceptionObject as Exception).Message, Program.Name);
}
以防未处理的异常
try 块包含可能导致异常的受保护代码。执行该块,直到抛出异常或成功完成。
你可以去How often should I use try and catch
看看
捕获异常的基本经验法则是当且仅当您有一种有意义的处理异常的方法时才捕获异常。
如果您只想记录异常并将其抛出堆栈,则不要捕获异常。它没有任何意义并且使代码混乱。
如果您预计代码的特定部分会失败,并且您有后备方案,请务必捕获异常。
当然,您总是遇到需要使用 try/catch 块的已检查异常情况,在这种情况下您别无选择。即使是检查异常,也要确保正确记录并尽可能干净地处理。
使用 Try catch 块没有问题,因为它没有开销(除非你一直在任何地方添加它,这可能包括可读性开销),而通常会为 catch 和 finally 块添加额外的 IL,当没有异常时被抛出,行为几乎没有区别。
但是,如果您的代码确实抛出异常,这就是您遇到轻微性能问题的地方,因为在这种情况下必须创建异常,必须放置堆栈爬行标记,并且如果处理了异常及其 StackTrace 属性 访问时,会发生堆栈遍历。因此,总是将代码包装在 try catch 块中可能不是个好主意 或者,您可以将它放在父级别,然后检查堆栈跟踪
您认为可能发生错误的每一段代码都应该包含在 try catch 块中。如果你正在处理一些实时问题和应用程序,你应该在任何地方使用它。这是一个很好的编程习惯。如果您不知道会发生什么异常,只需对一般异常使用 catch 块:
try
{
//your code
}
catch (Exception ex)
{
//exception handling
}
或者您可以使用:
try
{
//your code
}
catch
{
//your custom message
}
使用 try-catch 很大程度上取决于上下文。
对我来说,没有 规则 告诉开发人员何时使用或不使用 try catch 块。
开发人员代码必须防止由于空参数或文件存在或数据一致性等上下文导致的明显错误或异常。
在开发供许多其他程序使用的库的情况下,该库仅捕获一些关键异常,以允许顶级程序获得有关错误和异常的更多详细信息。
例如,我们在库中有一个方法使用 System.IO.File.WriteAllLines。
void bool DoSomethingWithFile()
{
try
{
// Some code here
System.IO.File.WriteAllLines()
//some code here
return true;
}
catch()
{
LogExeption();
return false;
}
}
如何告诉顶级程序 PathTooLongException 或存在安全异常,除非您在 catch 块中添加 throw。
我的资深同事告诉我将每个方法都包装在一个 try-catch 块中,这样他们就可以跟踪异常发生的位置,以帮助更快地调试问题。将每个方法包装在 Try Catch 中是否更好,例如:
Public int foo()
{
try
{
//do something
}catch(Exeception ex)
{
//do something with ex
}
}
还是在我认为可能发生的异常情况下捕获异常情况更好?例如。用数组做某事可能会导致 IndexOutOfRangeException
发生。
//wrap this in try catch
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
谢谢。
最好在代码的关键部分使用它,然后:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
ServerForm form = new ServerForm();
Application.Run(form);
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.Message, Program.Name);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show((e.ExceptionObject as Exception).Message, Program.Name);
}
以防未处理的异常
try 块包含可能导致异常的受保护代码。执行该块,直到抛出异常或成功完成。
你可以去How often should I use try and catch
看看捕获异常的基本经验法则是当且仅当您有一种有意义的处理异常的方法时才捕获异常。
如果您只想记录异常并将其抛出堆栈,则不要捕获异常。它没有任何意义并且使代码混乱。
如果您预计代码的特定部分会失败,并且您有后备方案,请务必捕获异常。
当然,您总是遇到需要使用 try/catch 块的已检查异常情况,在这种情况下您别无选择。即使是检查异常,也要确保正确记录并尽可能干净地处理。
使用 Try catch 块没有问题,因为它没有开销(除非你一直在任何地方添加它,这可能包括可读性开销),而通常会为 catch 和 finally 块添加额外的 IL,当没有异常时被抛出,行为几乎没有区别。
但是,如果您的代码确实抛出异常,这就是您遇到轻微性能问题的地方,因为在这种情况下必须创建异常,必须放置堆栈爬行标记,并且如果处理了异常及其 StackTrace 属性 访问时,会发生堆栈遍历。因此,总是将代码包装在 try catch 块中可能不是个好主意 或者,您可以将它放在父级别,然后检查堆栈跟踪
您认为可能发生错误的每一段代码都应该包含在 try catch 块中。如果你正在处理一些实时问题和应用程序,你应该在任何地方使用它。这是一个很好的编程习惯。如果您不知道会发生什么异常,只需对一般异常使用 catch 块:
try
{
//your code
}
catch (Exception ex)
{
//exception handling
}
或者您可以使用:
try
{
//your code
}
catch
{
//your custom message
}
使用 try-catch 很大程度上取决于上下文。 对我来说,没有 规则 告诉开发人员何时使用或不使用 try catch 块。
开发人员代码必须防止由于空参数或文件存在或数据一致性等上下文导致的明显错误或异常。 在开发供许多其他程序使用的库的情况下,该库仅捕获一些关键异常,以允许顶级程序获得有关错误和异常的更多详细信息。
例如,我们在库中有一个方法使用 System.IO.File.WriteAllLines。
void bool DoSomethingWithFile()
{
try
{
// Some code here
System.IO.File.WriteAllLines()
//some code here
return true;
}
catch()
{
LogExeption();
return false;
}
}
如何告诉顶级程序 PathTooLongException 或存在安全异常,除非您在 catch 块中添加 throw。