C#异常处理

try/catch异常

 try
            {
                    
            }
            catch (Exception ex)
            {

            }

把可能引起系统崩溃的异常放在try里面,如果没有出现异常就依次的执行,如果出现异常了就执行catch里面的语句然后继续执行,这样做的目的是为了防止因为异常导致软件崩溃,放在try里面就算出现了异常也可以继续执行catch。
在这里插入图片描述

try-catch-finally

后面追加一个finally无论是否异常都会执行,一般用于网络游戏掉线之后保存数据的处理

public void ExceptionDemo2()
        {
            int intNum1 = 10;
            int intNum2 = 0;
            int intResult = 0;

            try
            {
                intResult = intNum1 / intNum2;
            }
            catch (Exception e)
            {
                Console.WriteLine("发生严重错误" + e.Message);
            }
            finally
            {
                Console.WriteLine("无论是否发生异常都会执行");
            }
            Console.WriteLine("intResult={0}", intResult);
        }

system.exception

在这里插入图片描述

public void ExceptionDemo1()
        {
            int intNum1 = 10;
            int intNum2 = 0;
            int intResult = 0;

            try
            {
                intResult = intNum1 / intNum2;
            }
            catch (Exception e)
            {
                Console.WriteLine("发生严重错误"+e.Message);
                Console.WriteLine("" + e.Source);
                Console.WriteLine("" + e.StackTrace);
                Console.WriteLine("" + e.InnerException);
            }
            Console.WriteLine("intResult={0}", intResult);
        }

在这里插入图片描述

使用多个catch捕获异常

C#封装了很多异常,比如除以0的异常( catch(DivideByZeroException e1)),通过多个catch来判断具体出现的是什么异常
catch (Exception e)被称为根异常,根异常的范围很大,所以可以在前面加多个细节异常

try
            {
                intResult = intNum1 / intNum2;
            }
            catch(DivideByZeroException e1)
            {
                Console.WriteLine("发生了除以零的异常" + e1.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("发生严重错误" + e.Message);
            }

在这里插入图片描述

throw

在特定的情况下可以自己设置一个新的异常
throw new Exception(“销售数量不能小于负数”);
引发一个exception异常(根异常)
一旦insalenumber小于0,则产生异常

 //通过throw自己定义一个
        public void TestThrowException(int inSaleNumber)
        {
            if (inSaleNumber < 0)
            {
                throw new Exception("销售数量不能小于负数");
            }
            else
            {
                //计算销售额
            }
        }

自定义异常类

在一些特定的情况下需要自己定义异常类,比如销售额需要大于0,可以自己定义一个异常类,然后通过thowe调用自己的写的异常类,然后通过trycatch来处理自己定义的异常,一般最后才用exception异常类,因为他是根异常能监测出所有的异常但是效率不高。
自定义异常要继承ApplicationException类
在class前面添加[Serializable]序列化,这样其他的类就可以调用这个异常类,将其写入文件当中

/**
 * 
 * 
 * 
 * 自定义异常类
 * 
 * 
 * **/
using System;
namespace damo1
{
    //序列化
    [Serializable]
    public class InvalidInputException:ApplicationException
    {
        public InvalidInputException()
        {
        }
        public InvalidInputException(string strExceptionInfo):base(strExceptionInfo)
        {
        }
    }
} 
 //通过throw自己定义一个
        public void TestThrowException(int inSaleNumber)
        {
            if (inSaleNumber < 0)
            {
                throw new InvalidInputException("销售数量不能小于负数");
            }
            else
            {
                //计算销售额
            }
        }


public void ExceptionDemo3()
        {
            try
            {
                intResult = intNum1 / intNum2;
            }
            catch(InvalidInputException e1)
            {
                Console.WriteLine("自己定义的异常" + e1.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("发生严重错误" + e.Message);
            }
            finally
            {
                Console.WriteLine("无论是否发生异常都会执行");
            }
       }

在这里插入图片描述

常用异常类

在这里插入图片描述

程序调试技术

错误类型

语法错误:vs会直接发现
逻辑错误:需要运用调试技术来查找
运行错误:运行后会发现
可以在vs左边灰色的地段单击设置断点,这样在运行之后就会在这个点停住,再按F5就可以继续运行直到遇到下一个断点为止

在这里插入图片描述
局部变量窗口:进入断点之后会有局部变量的窗口,里面有所有局部变量的值
在这里插入图片描述
即时窗口:也可以通过及时窗口输入自己想获得的变量回车之后会显示其值
在这里插入图片描述
监视窗口:通过监视窗口可以动态观察特定的变量,比如像监视i变量就输入i变量,一般来说说如果一个项目有很多的变量局部变量窗口就会很乱,这个时候使用监视窗口特定的监视某些变量。
在这里插入图片描述
注意;如果没有窗口可以从以下路径调出
在这里插入图片描述

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值