C#讲座(3)--C#中异常的处理

异常概述exception 捕获异常及处理  跟踪trace

异常是当程序发生错误时产生的一种信号

异常的类型
每种异常类型都是一个类
两种大分类
system.systemException
system.applicationexception

处理方式
1异常被对象所表现而并不是错误代码
2异常的产生是通过throwing一个该异常的对象实现的
3异常的捕获是通过catch该异常的对象
4命名上可以读出是哪类异常

捕获异常try- catch
  把可能发生异常的代码放到try中
  用catch 得到结果

为每个可能的Exception定制解决方法
try
{
  s = << user’s input >>;
  i = int.Parse(s); // if this fails, .NET throws exception…
}
catch(FormatException)
{
  MessageBox.Show(“Please enter a numeric value.”);
  return;
}
catch(OverflowException)
{
  MessageBox.Show(“Value is too large/small (valid range ” + int.MinValue +
  “ ... ” + int.MaxValue + “).”);
  return;
}
catch(Exception ex)
{ // else something we didn’t predict has happened…
  string msg;
  msg = String.Format(“Invalid input./n/n[Error={0}]”, ex.Message);
  MessageBox.Show(msg);
  return;
}

常处理的系统流程
1自动抛出异常
2暗示

try -catch工作方式
1  无异常就跳过catch
2 异常时进入catch段
try
{
step1;
step2;
step3;
}
catch (Exception ex)
{
catch1;
catch2;
}
step4;

暗示
 在进行catch子句后程序继续执行
     除非catch中有return throw exit
  
可以嵌套

try
{
<< perform operation(s) >>
}
catch(Exception ex)
{
try
{
<< try various recovery strategies >>
}
catch
{
// none of the strategies worked…
throw ex;
}
}

异常捕获顺序
1 范围小的Exception放在前面

2如果Exception之间有继承关系,则把子类放在
前面的Exception子句中,把父类放在后面的catch中

try-catch-finally来确保一些收尾工作
finally{《close database》}

Throw Exception

跟踪Tracing
运行错误时输出信息

配置跟踪
<configuration>
<appSettings>
<add key="Traing" value="true">
</appSettings>
</configuration>
using T = System.Diagnostics.Trace;
public class DataAccess
{ ...
  public void Open()
{
try {
  T.WriteLineIf(Globals.Trace, “DataAccess.Open():”);
  T.Indent();
  T.WriteLineIf(Globals.Trace, “Connection string=...”);
...
}
catch(Exception ex) {
  T.WriteLineIf(Globals.Trace, ex.GetType() + “: ” + ex.Message);
  T.WriteLineIf(Globals.Trace, ex.StackTrace);
...
}
  finally {
  T.Unindent();
  T.Flush();
}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值