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

文章目录

  • 1、C# 异常处理原理:
  • 2、C# 异常处理实用案例(简化版示例):
  • 3、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)
————————————————

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust 圣经 阅读 字符、布尔、单元类型

字符类型&#xff08;char&#xff09; Rust 的字符不仅仅是 ASCII &#xff0c;还包含所有的 Unicode 值&#xff0c;包括单个的中文、日文、表情符号等等。 Unicode 值的范围从 U0000 ~ UD7FF 和 UE000 ~ U10FFFF。 因为每个 Unicode 都是 4 个字节编码&#xff0c;所以字符…

知虾皮Shopee:东南亚最受欢迎的电子商务平台

在如今数字化时代&#xff0c;电子商务平台成为人们购物的首选方式。Shopee作为东南亚地区最受欢迎的电子商务平台&#xff0c;通过其多样化的商品、便捷的购物体验和创新的商业模式&#xff0c;迅速在该地区占据了重要地位。本文将详细介绍Shopee的特点和优势&#xff0c;以及…

设计模式 七大原则

1.单一职责原则 单一职责原则&#xff08;SRP&#xff1a;Single responsibility principle&#xff09;又称单一功能原则 核心&#xff1a;解耦和增强内聚性&#xff08;高内聚&#xff0c;低耦合&#xff09;。 描述&#xff1a; 类被修改的几率很大&#xff0c;因此应该专注…

CNN——VGG

1.VGG简介 论文下载地址&#xff1a;https://arxiv.org/pdf/1409.1556.pdf VGGNet 是由牛津大学视觉几何小组&#xff08;Visual Geometry Group, VGG&#xff09;提出的一种深层卷积网络结构&#xff0c;他们以 7.32% 的错误率赢得了 2014 年 ILSVRC 分类任务的亚军&#xff…

2024年MySQL学习指南(二),探索MySQL数据库,掌握未来数据管理趋势

文章目录 前言4. DDL- 操作数据库4.1 查询4.2 创建数据库4.3 删除数据库4.4 使用数据库 5. DDL- 操作数据表5.1 数据类型5.2 查询表5.3 创建表5.4 删除表5.5 修改表 6. 实战案例详解 前言 接上一篇文章【2024年MySQL学习指南&#xff08;一&#xff09;】 4. DDL- 操作数据库 …

2023-2024 年广东省职业院校技能大赛高职组 “软件测试”赛项竞赛规程

2023-2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “软件测试”赛项竞赛规程 一、赛项信息 赛项名称&#xff1a;软件测试 赛项编号&#xff1a;GZ034 赛项组别&#xff1a;高职组 二、竞赛目标 软件是新一代信息技术的灵魂&#xff0c;是数字经济发展的基础…

LeetCode 每日一题 Day 32 ||递归单调栈

2487. 从链表中移除节点 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1&#xff1a; 输入&#xff1a;head [5,2,13,3,8] 输出&#xff1a;[13,8] 解释&#xff1a;需要移除的节点是 5 &#xff0c;2 和 3 。…

大数据 - Doris系列《二》- Doris安装(亲测成功版)

目录 &#x1f436;2.1 安装前准备 &#x1f959;1.设置系统最大文件打开句柄数 >启动一个程序的时候&#xff0c;打开文件的数量就是句柄数 &#x1f959;3.时钟同步 &#x1f959;4.关闭交换分区&#xff08;swap&#xff09; &#x1f436;2.2 安装FE &#x1f436…

论文悦读(7)——NVM文件系统之Trio(SOSP‘23)文件系统

TRIO&#xff08;SOSP23&#xff09; 1. 背景&#xff08;Background&#xff09;1.1 NVM Technologis1.2 File System Customization1.3 Userspace NVM File Systems 2. 观察与动机&#xff08;Observation & Motivation&#xff09;3. 设计与实现&#xff08;Design &…

JMeter 插件大全:详细介绍 Jmeter 常用插件

JMeter作为一个开源的接口性能测试工具&#xff0c;其本身的小巧和灵活性给了测试人员很大的帮助&#xff0c;但其本身作为一个开源工具&#xff0c;相比于一些商业工具&#xff08;比如 LoadRunner&#xff09;&#xff0c;在功能的全面性上就稍显不足。这篇博客&#xff0c;就…

傅里叶级数、傅里叶变换、小波变换、离散余弦变换的理解

目录 1. 傅里叶级数2.傅里叶变换 1. 傅里叶级数 功能&#xff1a;能把任意周期性函数展开成一系列正弦、余弦函数的和。 公式&#xff1a; f ( x ) a 0 2 ∑ n 1 ∞ ( a n cos ⁡ ( 2 π n x T ) b n sin ⁡ ( 2 π n x T ) ) 傅里叶系数 a n 2 T ∫ x 0 x 0 T f ( x )…

网络安全|2024年需要重点关注的10种DNS攻击类型

目前&#xff0c;针对域名系统&#xff08;DNS&#xff09;的攻击已经成为企业组织数字化发展中的一个严重问题&#xff0c;每年都有数千个网站成为此类攻击的受害者。据最近的研究数据显示&#xff0c;2023年企业组织与DNS攻击相关的损失同比增加了49%&#xff0c;这些损失不仅…

即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效

设计稿走查 在设计工作中&#xff0c;对设计稿和实际页面进行对比是必不可少的环节。然而&#xff0c;传统的对比方式往往耗时耗力&#xff0c;无法精确测量差异。为了解决这个问题&#xff0c;我们推出了一款强大的工具&#xff0c;它可以通过图片对比&#xff0c;轻松查看设…

使用results.csv文件数据绘制mAP对比图

yolov5每次train完成&#xff08;如果没有中途退出&#xff09;都会在run目录下生成expX目录&#xff08;X代表生成结果次数 第一次训练完成生成exp0 第二次生成exp1…以此类推&#xff09;。expX目录下会保存训练生成的weights以及result.txt文件&#xff0c;其中weights是训练…

Redis第3讲——跳跃表详解

一、什么是跳跃表 跳跃表&#xff08;skiplist&#xff09;是一种随机化的数据结构&#xff0c;由William Pugh在论文《Skip lists: a probabilistic alternative to balanced trees》中提出。它通过在每个节点中维持多个指向其它节点的指针&#xff0c;从而达到快速访问节点的…

Zabbix 监控介绍

1、功能概述 通常所说的监控&#xff0c;会模糊地包含以上下个细分领域的内容&#xff1a; 应用性能监控&#xff08;Application Performance Monitoring&#xff09;业务交易监控&#xff08;Business Transaction Monitoring&#xff09;网络性能监控&#xff08;Network …

华为云CES监控与飞书通知

华为云负载均衡连接数监控与飞书通知 在云服务的日常运维中&#xff0c;持续监控资源状态是保障系统稳定性的关键步骤之一。本文通过一个实际案例展示了如何使用华为云的Go SDK获取负载均衡器的连接数&#xff0c;并通过飞书Webhook发送通知到团队群组&#xff0c;以便运维人员…

福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!

千里之行&#xff0c;始于足下&#xff0c;若想提高软件编程能力&#xff0c;最最重要的是实践&#xff0c;所谓纸上得来终觉浅&#xff0c;绝知此事要躬行。根据相关【艾宾浩斯遗忘曲线】研究表明&#xff0c;如果不动手实践&#xff0c;记住的东西会很快忘记。 为了便于大家查…

C#设计模式之观察者模式

前言 观察者&#xff08;Observer)模式也称发布-订阅&#xff08;Publish-Subscribe&#xff09;模式&#xff0c;定义了对象间一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 观察者模式的图解如下所示…

小程序测试和APP测试的区别

今天看了一下关于如何测试小程序的教学视频&#xff0c;里面讨论了一个很经典的面试题&#xff1a;小程序测试和APP测试的区别&#xff0c;包括在之前的面试过程中也确实是遇到过这个问题&#xff0c;所以这次打算把它记录下来&#xff0c;也算是知识巩固了。 首先从测试的内容…