• 所有的异常都要使用try catch 语句捕获?


    在开发应用程序过程中必须检测代码可能发生的错误并进行正确的处理,这个在理想的情况下,应用程序中的每行 代码都按照预想的执行,要用到的每种资源总是可以利用,但是在实际的开发过程中,写代码难免会出错,或是网络中断、数据服务停止运行都会是应用程序出现异常。

    .NET框架提供了一种结构化的异常处理机制,用于处理代码出现的各种错误,就是try catch.

    来个小例子。

               object obj;
                DateTime dt;
                try
                {
                    obj = new object();
                    dt=(DateTime)obj;
                }
                catch (InvalidCastException e)//无效类型转换的异常
                {
    
                    Console.WriteLine(e.Message);
                }
                catch (InvalidOperationException e)//无效操作异常
                {
                    Console.WriteLine(e.Message);
                }
                catch                       //其他的异常
                {
                    Console.WriteLine("程序运行出错!");
                }
                finally                    //必须执行的代码块
                {
                    dt = Convert.ToDateTime("1900-01-01");
                    Console.WriteLine(dt.ToString());
                }

    上述的例子中,将object类型转换为DateTime类型时,就会引发类型的无效转换异常。
    .NET中使用的结构化异常处理的原则是所有可能出错的地方都要加上结构化异常处理代码,因为这样能够保证在错误发生时,正确的释放所有的资源,但是,不能盲目的使用它,不是每一句代码都要加上try catch。因为异常是一种耗费资源的机制,每次抛出异常时,异常的堆栈都会建立,异常的信息也会被加载,这样给程序带来一些负担。所以,能加则加,不能加的决不盲目的加。
    上述的代码可以简化为用is或者是as代替。
      object obj;
                DateTime dt;
                obj = new object();
                if (obj is DateTime)
                {
                    dt = (DateTime)obj;
                }
                else
                {
                    Console.WriteLine("类型转换无效!");
                }

    这样看来是简化多了,处理了异常,也节约了资源,一举两得。

     
  • 相关阅读:
    【每日英语】
    【百宝箱】CLion: Cound not load cache
    C# WPF:这次把文件拖出去!
    C# WPF:快把文件从桌面拖进我的窗体来!
    两个List< string>比较是否相同的N种方法,你用过哪种?
    分享套接字数据包序列化与反序列化方法
    如何从含有占位符的字符串生成一个ReactNode数组
    vscode 插件配置指北
    第十一周总结
    机场&代理商-关系图
  • 原文地址:https://www.cnblogs.com/jason-davis/p/4072405.html
Copyright © 2020-2023  润新知