try catch 在不异常的时候不损耗性能,耗损性能的是throw ex,所以在非异常是,不要滥用throw,特别是很多代码习惯:if(age<0) throw new Exception("年龄不能小于0"),这种代码。

另外throw 有多种写法

try catch(ex) { throw ex; }这种代码是表示ex 已经被处理了,又重新抛出了ex异常,重置了错误信息,导致找不到真正的异常位置。

try catch { throw } 直接抛出

try catch(Exception){ throw} 如上

另外,如果如果实在需要增加异常说明,可以改成如下:

try catch(Exception ex){ throw new Excrption("连接失败!",ex) ;}这种形式会将原始异常一起抛出。

winform中的线程,需要用委托的形式将ex抛到UI线程,否则只会导致程序退出。

Thread t = new Thread((ThreadStart)delegate
{
try
{
throw new Exception("非窗体线程异常");
}
catch (Exception ex)
{
this.BeginInvoke((Action)delegate
{
throw ex;
});
}
});
t.Start();

  finally不会因为调用堆栈中存在的异常而被终止,CLR会先执行catch块,然后再执行finally块

static void Main(string[] args)
{
Method3();
} static void Method3()
{
ClassShouldDisposeBase c = null;
try
{
c = new ClassShouldDisposeBase("Method3");
Method4();
}
catch
{
Console.WriteLine("在Method3中捕获了异常。");
}
finally
{
c.Dispose();
} } static void Method4()
{
ClassShouldDisposeBase c = null;
try
{
c = new ClassShouldDisposeBase("Method4");
throw new Exception();
}
catch
{
Console.WriteLine("在Method4中捕获了异常。");
throw;
}
finally
{
c.Dispose();
}
}

  

最新文章

  1. Golang Beego 分析(一)
  2. NSURLSession/NSURLConnection的上传文件方法(已做了更新)
  3. double-clicking
  4. asp.net生成PDF文件 (1)
  5. VC6.0 导入资源崩溃
  6. s nrmtyu,yi.sfn rt
  7. http协议之cookie标准RFC6265介绍
  8. 【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法
  9. IP组播技术介绍及实现例子
  10. html5绘图
  11. Spark Submit 脚本
  12. Linux忘记密码常用的几种解决方法
  13. 获取cookie
  14. SpringMVC包括哪些组件
  15. linux 安装 nvm
  16. [我的阿里云服务器] —— WorkPress
  17. Intellij IDEA 2017 debug断点调试技巧与总结详解篇
  18. 【刷题】LOJ 6015 「网络流 24 题」星际转移
  19. SpringBoot启动器详解pom.xml
  20. Golang之hello,beego

热门文章

  1. Orace开源的异步IO编程库,特点是接口非常简单
  2. 21天学通C++学习笔记(二):C++程序的组成部分
  3. golang 重构博客统计服务
  4. C# LINQ(3)
  5. 「BZOJ 1924」「SDOI 2010」所驼门王的宝藏「Tarjan」
  6. Weekly Contest 117
  7. 洛谷P2763 试题库问题(最大流)
  8. Jmeter环境搭建详细介绍
  9. Math.random取随机整数
  10. 解决CentOS查询不到ip