关于写try catch finally的疑惑 本帖最后由 tasolla 于 2011-07-19 03:34:54 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、设好最后的防线:只在应用程序边界Catch,比如UI的事件,一旦Catch,不再throw;2、如果i==null经常发生,并且是一种“正常情况”,那么楼主第一种做法是较为合理的, 这种情况下引发异常就会造成性能问题;3、全线进攻:用断言拦截所有你能遇见的"不正常"情况,避免系统引发标准异常, 楼主的代码应该改写成进攻性的, 也就是说,如果i==null这种情况是“不正常的”,并且你能预见到这种不正常情况, 那你最起码应该报告“自定义异常”或者一个特定的异常(因为是你能预见的), 而不应该由系统引发一个标准异常. 举例:if (i == null){ //在这之前你首先应该写一个自定义异常类,并且拥有这样的构造器MyException(string pErrMsg) throw new MyException("出现null异常,变量i不能为null"); //当然也可以:throw new ArgumentNullException("变量i不能为null");}else{ if (i == 0) { //正常执行的代码 } else { //跳出 }} 请参考MSDN相关链接:异常引发:http://msdn.microsoft.com/zh-cn/library/ms229030(v=VS.80).aspx异常和性能:http://msdn.microsoft.com/zh-cn/library/ms229009(v=VS.80).aspx处理异常的最佳做法::http://msdn.microsoft.com/zh-cn/library/seyhszts.aspx 我简单地回答你:该用就用在实际项目中,try...catch...finally是再常见不过的东西了。 在先等待,Rdlc报表显示问题 窗体宽度高度问题 求助,用directshow进行摄像头操作,提示连接到系统上的设备没有发挥作用 如何实现回调 看了半天没有明白 【求助】如果禁用USB存储设备读出权限 怎样打包成cab 一个简单的问题请帮忙 C#中如何使用WaitForSingleObject函数,信号事件如何触发呢 文本框的传值问题 求一款截取gif格式的软件。 Linq 删除XML节点删除不掉,非常急!求高手援助 bitmapImage.EndInit();引发异常:未找到适用于完成此操作的图像处理组件。
2、如果i==null经常发生,并且是一种“正常情况”,那么楼主第一种做法是较为合理的,
这种情况下引发异常就会造成性能问题;
3、全线进攻:用断言拦截所有你能遇见的"不正常"情况,避免系统引发标准异常,
楼主的代码应该改写成进攻性的,
也就是说,如果i==null这种情况是“不正常的”,并且你能预见到这种不正常情况,
那你最起码应该报告“自定义异常”或者一个特定的异常(因为是你能预见的),
而不应该由系统引发一个标准异常.
if (i == null)
{
//在这之前你首先应该写一个自定义异常类,并且拥有这样的构造器MyException(string pErrMsg)
throw new MyException("出现null异常,变量i不能为null");
//当然也可以:throw new ArgumentNullException("变量i不能为null");
}
else
{
if (i == 0)
{
//正常执行的代码
}
else
{
//跳出
}
}
异常引发:http://msdn.microsoft.com/zh-cn/library/ms229030(v=VS.80).aspx
异常和性能:http://msdn.microsoft.com/zh-cn/library/ms229009(v=VS.80).aspx
处理异常的最佳做法::http://msdn.microsoft.com/zh-cn/library/seyhszts.aspx
我简单地回答你:该用就用在实际项目中,try...catch...finally是再常见不过的东西了。