异常问题一般分为:异常捕获、抛出异常、异常处理三步骤;
(1)异常捕获;
通过try{可能有异常的代码块}catch(指定一个实例化的异常基类){捕捉到异常后需要处理的问题}
class Program
{
static void Main(string[] args)
{
try
{
byte mybyte = Convert.ToByte(Console.ReadLine());
//byte为8位(0-255)若输入数据大于255,则引发异常。
Console.WriteLine(mybyte);
}
catch (ArithmeticException ex)//实例化一个ArithmeticException类,该预定义类的功能是:当算术、强制转换或转换操作发生错误时引发的异常。
{
Console.WriteLine(ex.Message.ToString());
}
Console.ReadKey();
}
}
(2)抛出异常
①throw new 异常类(VS自带的基类,文末附有常用基类)
class Program
{
private static int ConvertStringToInt(string mystr)
{
int outnum = 0;
try
{
outnum = Convert.ToInt32(mystr);
return outnum;
}
catch
{
throw new FormatException("格式转换不正确(二胖制作)");
}
}
static void Main(string[] args)
{
string mystr = "51";
try
{
int myint;
myint = Program.ConvertStringToInt(mystr);
Console.WriteLine(myint);
}
catch(FormatException exf)
{
Console.WriteLine(exf.Message.ToString());
}
Console.ReadKey();
}
}
②throw new 异常类(自己预定义的基类)
class MyException:Exception
{
public MyException(string message):base(message)
//欲通过自己预定义类使用message方法,故在派生新的异常类时,需将基类中的message(即base(message))覆盖新定义的message(即string message)。
{
}
}
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine("这行代码在引发异常前被执行");
string mystr = "我是我自己定义的异常";
throw new MyException(mystr);
}
catch (MyException ex)
{
Console.WriteLine(ex.Message.ToString());
}
Console.ReadKey();
}
}
(3)异常处理
finally{不管try中代码是否引发异常,都将会执行的代码}
class Program
{
static void Main(string[] args)
{
int[] myint = { 0,2,4,6,8,10,12,14,16,18,20};
try
{
for (int i = 0; i < myint.Length; i++)
{
Console.WriteLine("720÷{0}={1}", myint[i], 720 / myint[i]);//数组成员有0,故会引发除数不能为0的异常。
}
}
catch (SystemException myex)
{
Console.WriteLine(myex.Message.ToString());
Console.WriteLine(myex.InnerException);
}
finally
{
Console.WriteLine("我什么时候都会执行,无论发生异常与否");
}
Console.ReadKey();
}
}