C#异常

使用原则:

  • 正常业务逻辑,不要使用异常来处理
  • 不要总是尝试去捕获或引发异常,而应该允许异常向调用堆栈往上传播
  • 只有在出现资源问题,严重错误时才引发异常
  • 如果向用户抛出异常,最好包装一下,引发一个含有友好信息的新异常
  • 抛出新异常,需要将原有异常附加进来,便于查错

在try finally中返回数据

  • 若在try中返回值类型数据,则在finally中对数据的操作无效
  • 若在try中返回引用类型数据,则在finally中对数据操作有效
  • 建议在try finally之外返回数据,这样在finally中修改值类型,引用类型数据都会生效

异常嵌套

  • 不恰当的异常嵌套,会导致打印出的堆栈不完整
  • 不要在底层捕获不会处理的异常
  • 在最上层捕获异常
// Wrong
try
{
    Method1();
}
catch(Exception err)
{
    // 这里没有处理错误,而直接继续转发这个错误,会导致这之前堆栈信息丢失
    throw err;
}
// correct
try
{
    Method1();
}
cache
{
    throw;
}

捕获未处理的异常

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

static void CurrentDomain_UnhandleException(object sender, UnhandledExceptionEventArgs e)
{
}

使用自定义异常

  • 方便调试
  • 包装若干异常
  • 便于调用者编码,根据业务划分异常
  • 引入新异常类

你可能感兴趣的:(C#异常)