C#基础(1) 异常实现基本错误处理

本文作为C#基础知识的查漏补缺使用,所以并不全面.

参考书籍<<C#本质论>>,<<C#高级编程>>

static void Main(string[] args)

{

WriteLine("Hello World!");

 

string str_first_name;

string str_age;

int int_age;

WriteLine("Hey you!");

WriteLine("Enter your first name");

str_first_name = ReadLine();

WriteLine("Enter your age:");

str_age = ReadLine();

int.TryParse(str_age, out int_age);

// int.TryParse 与 int.Parse 类似,但

//是不会产生异常,转换成功会返回true, 失败会返回false,最后一个为输出值,如果转换失败

//则输出值为0.

// int.TryParse(n1.Text, out p_intNumber) 第一个参数代表被转换的参数,

// 第二个参数为转换后的int类型, 成功则返回true, 失败则返回false.

WriteLine($"{str_first_name},You are {int_age*12} months old.");

// ExceptionHandler();

// ExTest();

}

上面是正常的调用方式,

下面为会出现异常的方法

  1. /// <summary>
  2. /// 异常捕获方法联系
  3. /// </summary>
  4. static int ExceptionHandler()
  5. {
  6. string firstName;
  7. string ageText;
  8. int age;
  9. int result = 0;
  10.  
  11. WriteLine("Enter your first name:");
  12. firstName = ReadLine();
  13.  
  14. WriteLine("Enter your age:");
  15. ageText = ReadLine();
  16.  
  17. try
  18. {
  19. age = int.Parse(ageText);
  20. WriteLine($"Hi {firstName}! you are {age} years old.");
  21. }
  22. catch (FormatException)
  23. {
  24. WriteLine($"the age entered, {ageText}, is not valid.");
  25. result = 1;
  26. }
  27. finally
  28. {
  29. WriteLine($"Goodbye{firstName}");
  30. }
  31. return result;
  32. }

实现过程:首先try块将可能引发的异常包围起来,如果真的引发异常,那么某个catch块要尝试处理这个异常,

try块之后必须紧跟一个或者多个catch块,(或者1个finally块), catch块可以选择指定异常的数据类型.只要数据类型与异常类型匹配,对应的catch块就会执行. 无论是否发生异常,最后都会执行finally 语句块.finally块的作用是提供一个最终位置,在其中放入无论是否发生异常都要执行的代码,finally块最适合用来执行资源清理.

 

注意处理异常的数据类型非常重要.catch块必须按照从最具体到最不具体排雷. System.Exception数据类型是最不具体的.

 

C#中的异常类型:(待学习)

Exception 所有异常对象的基类
SystemException 运行时产生的所有错误的基类
IndexOutOfRangeException 当一个数组的下标超出范围时运行时引发
NullReferenceException 当一个空对象被引用时运行时引发
InvalidOperationException 当对方法的调用对对象的当前状态无效时,由某些方法引发
ArgumentException 所有参数异常的基类
ArgumentNullException 在参数为空(不允许)的情况下,由方法引发
ArgumentOutOfRangeException 当参数不在一个给定范围之内时,由方法引发
InteropException 目标在或发生在CLR外面环境中的异常的基类
ComException 包含COM 类的HRESULT信息的异常
SEHException 封装win32 结构异常处理信息的异常

 

规范:

避免从finally块显示的引发异常(因方法调用而隐式的引发的异常可以被接受)// 不理解...

要优先使用try/finally而不是try/catch块来实现资源清理代码.

要在抛出的异常中描述异常为什么发生,如有可能,还有说明如何防范.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值