在开发应用程序过程中必须检测代码可能发生的错误并进行正确的处理,这个在理想的情况下,应用程序中的每行 代码都按照预想的执行,要用到的每种资源总是可以利用,但是在实际的开发过程中,写代码难免会出错,或是网络中断、数据服务停止运行都会是应用程序出现异常。
.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("类型转换无效!"); }
这样看来是简化多了,处理了异常,也节约了资源,一举两得。