C#学习教程13——异常与调试

13.异常与调试

在编程中不可避免地会出现一些错误,错误主要包括编译错误和逻辑错误。

13.1 Exception:异常类

.NET Framework类库中的所有异常都派生于Exception类,异常包括系统异常和应用异常。默认所有系统异常派生于System.SystemException,所有的应用程序异常派生于System.ApplicationException。

在这里插入图片描述

常用的系统异常类如下表所示。

异常类说明
System.OutOfMemoryException用 new 分配内存失败
System.StackOverflowException递归过多、过深
System.NullReferenceException对象为空
Syetem.IndexOutOfRangeException数组越界
System.ArithmaticException算术操作异常的基类
System.DivideByZeroException除零错误

13.2 异常处理

异常处理用到关键字如下:

  • try:用于检查发生的异常,并帮助发送任何可能的异常。
  • catch:以控制权更大的方式处理错误,可以有多个catch子句。
  • finally:无论是否引发了异常,finally的代码块都将被执行。
using System;
class Program
{
    static void Main(string[] args)
    {
        //定义存放5个整数的数组
        int[] a = new int[5];
        try
        {
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = int.Parse(Console.ReadLine());
            }
            for (int i = 0; i < a.Length; i++)
            {
                Console.Write(a[i] + " ");
            }
        }
        catch (FormatException f)
        {
            Console.WriteLine("输入的数字格式不正确!");
        }
        catch (OverflowException o)
        {
            Console.WriteLine("输入的值已经超出int类型的最大值!");
        }
        catch (IndexOutOfRangeException r)
        {
            Console.WriteLine("数组越界异常!");
        }
        finally
        {
            Console.WriteLine("执行Finally语句");
        }
    }
}

在这里插入图片描述

13.3 自定义异常

声明异常语句如下。

class 异常类名:Exception
{
}

抛出异常语句如下。

throw(异常类名);

下面的例子限制输入的整数在0-100之间。

using System;
class MyException : Exception
{
    public MyException(string message) : base(message)
    {
    }
}
class Program
{
    static void Main(string[] args)
    {
        try
        {
            int age = int.Parse(Console.ReadLine());
            if (age < 18 || age > 45)
            {
                throw new MyException("整数值必须在0-100之间!");
            }
            else
            {
                Console.WriteLine("输入的整数合法!");
            }
        }
        // 自定义异常类
        catch (MyException myException)
        {
            Console.WriteLine(myException.Message);
        }
        // 异常类
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
// 103
// 整数值必须在0-100之间!

13.4 输出调试信息

通常用Debug类或Trace类实现调试时输出调试信息,在System.Diagnostics命名空间中。

Debug.WriteLine();
Trace.WriteLine();
using System;
using System.Diagnostics;
class Program
{
    static void Main(string[] args)
    {
        string[] str = new string[5];
        Debug.WriteLine("开始向数组中存值:");
        for (int i = 0; i < str.Length; i++)
        {
            str[i] = Console.ReadLine();
            Debug.WriteLine("存入的第{0}个值为{1}", i, str[i]);
        }
        Debug.WriteLine("向数组中存值结束!");
    }
}

在程序中设置断点,按F5开始调试,逐步执行完程序。输出界面如下。

在这里插入图片描述

使用Trace类也能完成同样的效果,只需将上述代码中的Debug类换成Trace类即可。Trace类的WriteLine方法中的参数不支持上述代码中Debug类的WriteLine方法的参数形式,只能传递字符串。

需要注意的是当程序在Debug状态下执行时使用Debug类打印的信息才会在输出窗口中显示,在Release状态下执行时只有Trace类输出的内容才会显示在输出窗口中。

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暄踽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值