本文作为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();
}
上面是正常的调用方式,
下面为会出现异常的方法
- /// <summary>
- /// 异常捕获方法联系
- /// </summary>
- static int ExceptionHandler()
- {
- string firstName;
- string ageText;
- int age;
- int result = 0;
- WriteLine("Enter your first name:");
- firstName = ReadLine();
- WriteLine("Enter your age:");
- ageText = ReadLine();
- try
- {
- age = int.Parse(ageText);
- WriteLine($"Hi {firstName}! you are {age} years old.");
- }
- catch (FormatException)
- {
- WriteLine($"the age entered, {ageText}, is not valid.");
- result = 1;
- }
- finally
- {
- WriteLine($"Goodbye{firstName}");
- }
- return result;
- }
实现过程:首先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块来实现资源清理代码.
要在抛出的异常中描述异常为什么发生,如有可能,还有说明如何防范.