使用 try,catch,finally语句捕捉和处理这些异常所代表的错误
tyr{
int left = int.Parse(lhsOperand.Text);
int righ = int.Parse(rhsOperand.Text);
result.Text = answer.ToString();
}catch(FormatException fEx)
{
// 处理异常
}
代码运行时, 会尝试执行try块内的所有语句 如果没有任何语句产生异常,这些语句将一个接一个运行,直到全部完场 ,但一旦出现异常,就跳出try块,进入一个catch处理程序中执行
tyr{
int left = int.Parse(lhsOperand.Text);
int righ = int.Parse(rhsOperand.Text);
result.Text = answer.ToString();
}catch(FormatException fEx)
{
// 处理异常
}catch(FormatException fEx)
{
// ...
}
异常过滤器是C#6的新功能,它影响异常和catch处理程序的匹配方式,允许指定catch处理程序的额外使用条件,这些条件采用的型式是when关键字加布尔表达式,
catch(Exception ex)when(ex.GetType()!=typeof(System.OutOfMemoryException)){
// 处理之前未捕捉的除OutOfMemoryException之外的所有异常
}
// GetType方法返回作为实参提供的变量的类型
当catch处理程序运行完毕,会从整个try/catch块之后的语句继续,而不是从抛出异常的语句之后继续,不执行某个语句,
有时没问题,但许多时候都有大问题,解决方案是写一个finally块,放到其中的语句总是运行(无论是否抛出异常),finally块要么紧接在try块之后,要么紧接最后一个catch块之后,
只要程序进入与finally块关联的try块,finally块是种都会运行—即使发生异常,如果抛出异常,而且在本地捕捉阿斗该异常,那么首先运行异常处理程序,然后运行finally块,
如果没有在本地捕捉到异常,那么首先运行finally块,再搜索异常处理程序,无论如何,finally块总是运行.
TextReader reader = ...;
...
try
{
string line = reader.ReadLine();
while(line!=null)
{
...
line = reader.ReadLine();
}
}
finally
{
if(reader!=null)
{
reader.Dispose();
}
}
即使读取文件时发生异常,finally块也保证reader.Dispose语句得到执行