2019.03.28 读书笔记 关于try catch
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();
- }
- }
2019.03.28 读书笔记 关于try catch的更多相关文章
- 2019.03.28 读书笔记 关于lock
多线程就离不开lock,lock的本质是一个语法糖,采用了监视器Monitor. lock的参数,错误方式有很多种,只需要记住一种:private static readonly object loc ...
- 2019.03.29 读书笔记 关于params与可选参数
void Method1(string str, object a){} void Method2(string str, object a,object b) { } void Method3(st ...
- 2019.03.29 读书笔记 关于override与new
差异:override:覆盖父类分方法,new 隐藏父类方法. 共同:都不能改变父类自身方法. public class Test { public string Name { get; set; } ...
- 2019.03.27 读书笔记 关于GC垃圾回收
在介绍GC前,有必要对.net中CLR管理内存区域做简要介绍: 1. 堆栈:用于分配值类型实例.堆栈主要操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放.栈的执行效 ...
- 2019.03.26 读书笔记 关于for与foreach
for 是索引器,foreach是迭代器 foreach在movenext()中增加了对集合版本(一个整数,每次对集合修改都+1)的验证,另外反编译后的效果是使用了using(是try finally ...
- 2019.03.26 读书笔记 关于event
event 主要是给委托加了一层保护,不能任意的 class.delegate=null,class.delegate=fun1,不能由调用者去任意支配,而是由class自己去增加或减少,用+=.-= ...
- 2019.03.26 读书笔记 关于 invoke与begininvoke
invoke与begininvoke是同步委托和异步委托,但是有两种使用情况: 1. control中的invoke.begininvoke. 2. delegrate中的invoke.beginin ...
- 2019.03.22 读书笔记 Linq中的IEnumerable与IQueryable
Linq主要分为 Linq to object .Linq to XML .Linq to sql(现在都用EF了). 针对object和sql,微软分别设计了两套接口IEnumerable.IQue ...
- 2019.03.22 读书笔记 var object dynamic
var:语法糖,在编译时推断出类型,根据反编译可以看出.实际用处是增加代码的健壮性,比如 linq ,匿名对象等. object:很多人容易和var混淆,其实概念上完全不同,没什么可比性. dynam ...
随机推荐
- C6678 srio communication via Switch
First, I don't often give praise for support but I must say Travis, Karthik and Derek from TI have b ...
- 关于Pascal(帕斯卡)以及Camel(驼峰)命名法
小驼峰式命名法(lower camel case): 第一个单字以小写字母开始:第二个单字的首字母大写,例如:firstName.lastName,也被称为Camel命名法. 大驼峰式命名法(uppe ...
- String类的subtring(,)
截取字符串,参数(起始位置,截取长度)
- 使用Jenkins远程部署war包到tomcat container
Jenkins首先使用maven将源代码进行编译打包,之后需要将war包传送到tomcat服务器上进行部署. 来看一下Jenkins的基本配置,首先需要安装插件"Deploy to cont ...
- FTP无法获取目录及文件
在防火墙打开的情况下 如果不能获取,尝试将C:\windows\system32\svchost.exe 加入防火墙允许通道中. 并且设置为 主动模式
- duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
- 微软和Google的盈利模式对比分析
一: 微软和Google是世界上最成功科技巨头之一,但他们之间却有着不同的产品和业务,二者的盈利方式也各有不同,本文将分析和探讨的二者盈利模式的异同. 微软的盈利模式 在1975年由大学肄业的Bill ...
- Vue vue-resource发送Http请求
vue-resource 1.cnpm install vue-resource --save 2.在main.js中import VueResource from 'vue-resource' 3. ...
- SQL server 查询语句优先级-摘抄
SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...
- asp.net mvc 请求处理流程,记录一下。
asp.net mvc 请求处理流程,记录一下.