你是不是这样写异常处理代码的呢?

 更新时间:2013年05月14日 10:24:22   作者:  
本篇文章是对,你是不是这样写异常处理代码的进行了详细的分析介绍,需要的朋友参考下

经常看到同事这样写代码:

复制代码 代码如下:

DataSet QueryDB()
{
   DataSet ds=null;

   try
    {
         //do something
    }
    catch (Exception ex)
    {
         //这里要做日志记录
    }

    return ds;
}


这里有几个问题:

1:很明显,如果QueryDB方法发生了任何异常,客户端无法得知,例如客户端调用QueryDB方法,该方法返回了null,那这代表数据库里面没有这个数据呢?还是抛出了异常?

2:注释是不应该存在的,它应该被真实的日志记录代码给替代,例如Log.Write(ex);

3:该方法捕捉所有异常,这样任何异常都被捕获了,这对于开发很不方便,永远不要捕获你不能处理的异常。

4:为什么这样写代码??解释是:真实用户不希望看到错误信息,初听起来,好像有几分道理,试想没有哪个用户会用你的软件,然后老是抛出个异常什么的,但是这是部署之后的事情啊,而不是开发的程序员不希望看到异常啊。在开发的时候,如果能够看到详细的异常信息,那么可以很快的改正,修复Bug,何乐而不为之呢??

于是修改为如下:

复制代码 代码如下:

DataSet QueryDB()
{
     DataSet ds = null;

     try
     {
           //do something
     }
     catch (Exception ex)
     {
          Log.Write(ex);
          throw ex;
      }

      return ds;
}


好了,现在异常总算被捕获了,并且也被成功了抛出来了。

这段代码还是有问题??

在catch语句块中,throw ex; 最好修改为throw;

因为在.net中,异常都是不可修改的,每一次异常被抛出的时候,异常的堆栈跟踪信息都会被重置,

Throw 不会重置堆栈跟踪信息,但是throw ex;会重置。所以为了更方便的查找异常的抛出位置,最好使用throw 语句,而不是throw ex;否则clr会认为异常是在catch语句块中抛出的。

顺便再说一句,不要捕获你不能处理的异常,如果希望将来用户看不到异常信息,

大可以使用AppDomain.或者Application的全局异常处理。

相关文章

  • C# WPF调用QT窗口的方法

    C# WPF调用QT窗口的方法

    本文主要介绍了C# WPF调用QT窗口的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C#使用对象序列化类库MessasgePack

    C#使用对象序列化类库MessasgePack

    这篇文章介绍了C#使用对象序列化类库MessasgePack的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#异步编程几点需要注意的地方

    C#异步编程几点需要注意的地方

    这篇文章我们来讨论下关于C#异步编程几个不成文的建议,希望对你写出高性能的异步编程代码有所帮助
    2020-05-05
  • C#集合根据对象的某个属性进行去重的代码示例

    C#集合根据对象的某个属性进行去重的代码示例

    当根据对象的Name属性进行去重时,你可以使用以下三种方法:使用Distinct方法和自定义比较器、使用LINQ的GroupBy方法,以及使用HashSet,下面给大家介绍C#集合根据对象的某个属性进行去重的代码示例,感兴趣的朋友一起看看吧
    2024-03-03
  • C#中的char与string详解

    C#中的char与string详解

    本文详细讲解了C#中的char与string,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • C#文件管理类Directory实例分析

    C#文件管理类Directory实例分析

    这篇文章主要介绍了C#文件管理类Directory,非常实用,需要的朋友可以参考下
    2014-08-08
  • C#基于jwt实现分布式登录

    C#基于jwt实现分布式登录

    这篇文章主要介绍了C#基于jwt实现分布式登录的步骤,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • 使用c#实现微信自动化功能

    使用c#实现微信自动化功能

    这篇文章主要介绍了使用c#实现微信自动化,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • c# DataTable与不同结构实体类转换的方法实例

    c# DataTable与不同结构实体类转换的方法实例

    这篇文章主要介绍了c#的DataTable与不同结构实体类转换的方法实例,在大数据量的情况下很实用,大家可以参考使用
    2013-11-11
  • C#接口在派生类和外部类中的调用方法示例

    C#接口在派生类和外部类中的调用方法示例

    这篇文章主要介绍了C#接口在派生类和外部类中的调用方法,结合实例形式分析了C#接口的定义与具体使用方法,需要的朋友可以参考下
    2017-02-02

最新评论