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();
            }
        }

  

 

转载于:https://www.cnblogs.com/kafeibuhuizui/p/10614888.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值