版权声明:转载注明出处 https://blog.csdn.net/qq_19428987/article/details/86301475
实际工作处理中,程序可能会因为一些内部或者代码运行环境的不同发生一些未知的错误。但是程序可能会因此奔溃,并且很难定位出错的原因。C# 提供一套异常处理机制,帮助开发人员捕获异常。
try
{}
catch (Exception e)
{}
...
catch (Exception e)
{
Console.WriteLine("Error Message is " + e.Message);
}
finally
{}
如果出现异常会根据代码判断以此处理。
其中finally 块用于执行给定的语句,不管异常是否被抛出都会执行。
导致异常的原因
- 使用 throw主动抛出异常,用于立即无条件地引发异常。
if (string.IsNullOrEmpty(value))
{
throw new System.Exception("value", "parameter value cannot be null");
}
- 在执行 C# 语句和表达式的过程中,有时会出现一些例外情况,使某些操作无法正常完成,此时就会引发一个异常。例如,在整数除法运算中,如果分母为零,则会引发 System.DivideByZeroException。有关可能以此方式引发的各种异常的列表。
处理
创建子线程去执行任务时,主线程不会知道子线程的异常情况,所以每个线程都需要一个try、catch.
在捕获异常的时候,我们经常习惯性写catch(Exception ex) ,这个并非具体的异常,最好是能具体到ArgumentException、FormatException等异常类,不要抛出”new Exception()” ,catch中啥也不干,异常要向顶层抛出 这种情况在自己写demo的时候可能比较常见,在编写catch(Exception ex)这块代码下啥也不干,不要这样做。切记出现的异常要想顶层抛出 。
合理使用finally块
finally关键字是不管抛出什么类型异常都会被执行,大多数的时候能在finally块下执行的代码,也能写在catch里面。那么finally关键字到底在什么情况下使用比较合适呢,比如清理资源,关闭流,回复状态等。