unity C# 中一看就会的try-catch-finally、throw


C# 异常处理是一种用于捕获和处理程序运行时错误的机制,它允许程序在遇到不可预见或非正常条件时进行优雅地恢复或失败。C# 中的异常处理基于 try-catch-finally 结构,并且所有异常类都派生于 System.Exception 类。

1、C# 异常处理原理:

  1. try 块:包含可能会抛出异常的代码。如果在这部分代码中发生异常,控制权会立即转移到相应的 catch 块。
try
{
    // 可能会抛出异常的代码
    int result = Divide(10, 0); // 示例:除以零异常
}
  1. catch 块:用于捕获特定类型的异常。可以有多个 catch 块来捕获不同类型的异常,按照从最具体到最一般的顺序排列。
catch (DivideByZeroException ex) // 捕获除以零异常
{
    Console.WriteLine("Error: Division by zero occurred.");
}

catch (ArithmeticException ex) // 捕获其他算术异常
{
    Console.WriteLine("Error: An arithmetic error happened.");
}

catch (Exception ex) // 捕获所有未被前面 catch 块捕获的异常
{
    Console.WriteLine("A general exception was caught: " + ex.Message);
}
  1. finally 块:无论是否发生异常,都会执行这部分代码。通常用于资源清理(如关闭文件、数据库连接等)。
finally
{
    Console.WriteLine("This block is always executed after the try-catch blocks.");
}

2、C# 异常处理实用案例(简化版示例):

  1. 文件操作:

    • 打开文件时捕获 FileNotFoundException。
    try
    {
        using (StreamReader reader = new StreamReader("non_existent_file.txt"))
        {
            string content = reader.ReadToEnd();
        }
    }
    catch (FileNotFoundException ex)
    {
        Console.WriteLine($"File not found: {ex.FileName}");
    }
    
  2. 数据库查询:

    • 处理 SQL 查询引发的 SqlException。
    try
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            connection.Open();
            command.ExecuteNonQuery();
        }
    }
    catch (SqlException ex)
    {
        Console.WriteLine("SQL Error: " + ex.Message);
    }
    
  3. 网络请求:

    • 使用 HttpClient 进行网络调用时捕获 HttpRequestException。
    try
    {
        using (HttpClient client = new HttpClient())
        {
            HttpResponseMessage response = await client.GetAsync("http://example.com/notfound");
            response.EnsureSuccessStatusCode();
        }
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine("Network request failed: " + ex.Message);
    }
    
  4. 非法参数检查:

    • 检查方法传入的参数是否有效,若无效则抛出自定义异常。
    public void ProcessData(int input)
    {
        if (input < 0)
        {
            throw new ArgumentException("Input must be non-negative.");
        }
    
        try
        {
            // 正常处理逻辑
        }
        catch (Exception ex)
        {
            // 其他内部异常处理
        }
    }
    
  5. 资源清理:

    • 使用 finally 来确保流或连接始终关闭。
    Stream stream = null;
    try
    {
        stream = File.OpenRead("important_file.bin");
        // 对文件流的操作...
    }
    catch (IOException ex)
    {
        Console.WriteLine("IO Error: " + ex.Message);
    }
    finally
    {
        stream?.Dispose(); // 或者使用 'using' 语句代替 finally 块
    }
    

3、throw关键字

throw 关键字用于显式抛出一个异常对象。当你在代码中遇到错误条件或不满足预期的情况时,可以使用 throw 来创建并抛出一个异常。
csharp
throw new ArgumentException(“Invalid argument provided.”);
当你执行 throw 语句时,它会立即停止当前方法的执行,并开始寻找合适的异常处理结构(即 catch 块),从当前方法的调用者开始向上遍历调用栈。

总结一下 throw 和 catch 的区别与用途:

throw:用于启动异常传播过程,强制程序暂停正常执行流程并转而处理错误情况。
catch:用于接收和管理由 throw 引发的异常,提供了一种机制来应对程序运行时出现的问题,确保程序不会因未处理的异常而意外终止,同时能够针对性地执行错误恢复逻辑。

python学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
      本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!       真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)        本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。      说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极致人生-010

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

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

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

打赏作者

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

抵扣说明:

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

余额充值