博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#各种异常处理方式
阅读量:6079 次
发布时间:2019-06-20

本文共 2813 字,大约阅读时间需要 9 分钟。

.NET的异常处理机制用来发现、处理运行时错误。如果开发人员没有提供异常的处理机制,就默认采用.NET的机制。

 

通常使用try...catch...finally捕获异常。

 
try
{
//有可能发生异常
}
catch(Exception ex)
{
//处理异常
}
finally
{
//清理
}

○ 如果没有异常发生,就直接到finally语句块中。

○ finally语句块是必须执行的
○ 这里的catch和finally语句块是可选的。try语句块后面可以跟1个或多个catch语句块,try语句块后面可以直接跟finally语句块。
○ Exception是所有异常的基类

 

□ 使用.NET默认异常处理机制捕获异常

 
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 100/a;
Console.WriteLine(result);
Console.ReadKey();
}
}

 

□ 使用try...catch手动捕获异常

 
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出现异常");
}
 
Console.WriteLine(result);
Console.ReadKey();
}
}
 

 

□ 使用try...catch...finally手动捕获异常

 
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("出现异常");
}
finally
{
Console.WriteLine("放行吧,肯定会执行到我这里的~~");
}
 
Console.WriteLine(result);
Console.ReadKey();
}
}
 
 

可见,finally语句块中的内容一定会被执行。

 

□ 使用try...多个catch...finally手动捕获异常

 
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch (DivideByZeroException exception)
{
Console.WriteLine("不能被0除的异常");
}
catch (Exception ex)
{
Console.WriteLine("异常");
}
finally
{
Console.WriteLine("放行吧,肯定会执行到我这里的~~");
}
 
Console.WriteLine(result);
Console.ReadKey();
}
}
 
 

可见,只要有一个catch语句块捕获到异常,其它catch语句块不执行。

 

□ 使用try...catch(不带括号,不带参数)手动捕获异常

 
class Program
{
static void Main(string[] args)
{
int a = 0;
int result = 0;
try
{
result = 100/a;
Console.WriteLine("这里不会执行");
}
catch
{
Console.WriteLine("异常");
}
 
 
Console.WriteLine(result);
Console.ReadKey();
}
}
 

通过以上方法,可以捕获任何异常。

 

□ try...catch手动捕获抛出的异常

 
class Program
{
static void Main(string[] args)
{
try
{
throw new DivideByZeroException("除数不能为零");
}
catch (DivideByZeroException e)
{
Console.WriteLine("异常");
}
 
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
 

抛出异常本身并没有显示。

 

□ 较高层次上下文捕获较低抛出的异常

 
class Program
{
static void Main(string[] args)
{
Calculate c = new Calculate();
try
{
c.Divide();
}
catch (Exception e)
{
Console.WriteLine("捕获异常");
}
 
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
 
public class Calculate
{
public void Divide()
{
try
{
int a = 0;
int result = 100/a;
}
catch (DivideByZeroException e)
{
throw;
}
}
}
 
 

在Calculate内部抛出的异常,被更高层次的客户端捕获。

 

□ 自定义异常

 
class Program
{
static void Main(string[] args)
{
try
{
throw new MyException("i am exception");
}
catch (Exception e)
{
Console.WriteLine("捕获到自定义异常了~~");
}
 
Console.WriteLine("最后想说的");
Console.ReadKey();
}
}
 
public class MyException : Exception
{
public MyException(string str)
{
Console.WriteLine("这是我自定义的异常:" + str);
}
}
 
 

 

总结:

○ .NET异常处理并不是标准的try...catch...finally,可以是很灵活的。
○ 尽量在较低层次抛异常,在较高层次捕获异常。

转载地址:http://vnhgx.baihongyu.com/

你可能感兴趣的文章
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>
使用c:forEach 控制5个换行
查看>>
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>