繁体   English   中英

在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;

谢谢。

try块包含可能导致异常的保护代码。 执行该块直到抛出异常或成功完成。

您可以查看我应该多久使用一次try和catch

捕获异常的基本经验法则是,当且仅当您有一种有意义的处理方式时才捕获异常。

如果您只是记录异常并将其抛出堆栈,请不要捕获异常。 它没有任何意义和杂乱的代码。

当您预计代码的特定部分出现故障时,如果您有后备备份,请捕获异常。

当然,您总是遇到需要使用try / catch块的已检查异常的情况,在这种情况下您没有其他选择。 即使检查了异常,也要确保正确记录并尽可能干净地处理。

最好在代码的关键部分使用它,然后:

[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 catch块没有问题,因为它没有开销(除非你继续在任何地方添加它可能包括可读性开销),而且通常会为catch和finally块添加额外的IL,当没有抛出异常时,几乎没有行为上的差异。

但是,如果您的代码确实抛出异常,那么您就会遇到轻微的性能问题,因为在这种情况下必须创建异常,必须放置堆栈爬网标记,并且如果处理异常并访问其StackTrace属性,则堆栈遍历为发生。 因此,总是将代码包装在try catch块中可能不是一个好主意,或者你可以将它放在父级别,然后检查堆栈跟踪

使用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块中。 如果您正在处理一些实时问题和应用程序,您应该在任何地方使用它。 这是一个很好的编程实践。 如果您不知道可能发生什么异常,只需使用catch块来解决一般异常:

try
{
   //your code
}
catch (Exception ex)
{
   //exception handling
}

或者您可以使用:

try
{
   //your code
}
catch
{
   //your custom message
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM