11. C#高级进阶
一、C# 异常处理
在 C# 中,异常是在程序运行出错时引发的,所有异常都派生自 System.Exception 类。异常处理就是处理运行时错误的过程,通过异常处理可以使程序在发生错误时保持正常运行。
C# 中的异常处理基于四个关键字构建,分别是:try、catch、finally 和 throw。
- try:try 语句块中通常用来存放容易出现异常的代码,其后面紧跟一个或多个 catch 语句块;
- catch:catch 语句块用来捕获 try 语句块中出现的异常;
- finally:finally 语句块用于执行特定的语句,不管异常是否被抛出都会执行;
- throw:throw 用来抛出一个异常;
1、try/catch语句
假设一段代码会引发异常,则可以使用 try 和 catch 组合来捕获这个异常。举例如下:
try
{int a = 123;int b = 0;int x = a / b;
}
catch (Exception e)
{Console.WriteLine("捕获到的异常:{0}", e);
}
finally
{Console.WriteLine("finally 语句块中的代码!");
}
Console.ReadKey();
2、C# 中的异常类
C# 中的异常类主要是从 System.Exception 类派生的。比如 System.ApplicationException 和 System.SystemException 就是从 System.Exception 类派生的。
- System.ApplicationException 类支持由程序产生的异常,因此我们自定义的异常类都应继承此类;
- System.SystemException 类是所有系统预定义异常的基类;
下表中列举了一些从 Sytem.SystemException 类派生的预定义异常类:
| 异常类 | 描述 |
|---|---|
| System.IO.IOException | 处理 I/O 错误 |
| System.IndexOutOfRangeException | 处理当方法引用超出数组范围的索引时产生的错误 |
| System.ArrayTypeMismatchException | 处理当数组类型不匹配时产生的错误 |
| System.NullReferenceException | 处理引用一个空对象时产生的错误 |
| System.DivideByZeroException | 处理当除以零时产生的错误 |
| System.InvalidCastException | 处理在类型转换期间产生的错误 |
| System.OutOfMemoryException | 处理空闲内存不足产生的错误 |
| System.StackOverflowException | 处理栈溢出产生的错误 |
3、自定义异常类
除了可以使用系统预定义的异常类外,我们还可以自行定义异常类,自定义的异常类都应继承 System.ApplicationException 类。
class Program
{static void Main(string[] args){TestUserDefinedException test = new TestUserDefinedException();try{test.Validate(12);} catch (InvalidAgeException e){Console.WriteLine(e.Message);}Console.ReadKey();}
}public class InvalidAgeException : ApplicationException
{public InvalidAgeException(string message) : base(message){}
}public class TestUserDefinedException
{public void Validate(int age){if (18 > age){throw new InvalidAgeException("Sorry, Age must be greater than 18");}}
}
4、C# 抛出异常
如果异常是直接或间接派生自 System.Exception 类,则可以在 catch 语句块中使用 throw 语句抛出该异常。throw 语句的语法格式如下所示:
catch (Exception e)
{
......
throw e
}
二、C# 目录操作
C# 中允许您使用各种目录和文件相关的类来操作目录和文件,比如 DirectoryInfo 类和 FileInfo 类。
1、DirectoryInfo 类
DirectoryInfo 类派生自 FileSystemInfo 类。其中提供了各种用于创建、移动、浏览目录和子目录的方法。需要注意的是,该类不能被继承。
下表列出了 DirectoryInfo 类中一些常用的属性和方法:
| 属性/方法 | 描述 |
|---|---|
| Attributes | 获取当前文件或目录的属性 |
| CreationTime | 获取当前文件或目录的创建时间 |
| Exists | 获取一个表示目录是否存在的布尔值 |
| Extension | 获取表示文件扩展名部分的字符串 |
| FullName | 获取目录或文件的完整路径 |
| LastAccessTime | 获取当前文件或目录最后被访问的时间 |
| Name | 获取此 DirectoryInfo 实例的名称 |
| public void Create() | 创建一个目录 |
| public DirectoryInfo CreateSubdirectory(string path) | 在指定的路径上创建子目录,指定的路径可以是相对于 DirectoryInfo 类的实例的路径 |
| public override void Delete() | 如果为空的,则删除该 DirectoryInfo |
| public DirectoryInfo[] GetDirectories() | 返回当前目录的子目录 |
| public FileInfo[] GetFiles() | 从当前目录返回文件列表 |
2、FileInfo 类
FileInfo 类派生自 FileSystemInfo 类,其中提供了用于创建、复制、删除、移动、打开文件的属性和方法。与 DirectoryInfo 类相同,FileInfo 类也不能被继承。
下表列出了 FileInfo 类中一些常用的属性和方法:
| 属性 | 描述 |
|---|---|
| Attributes | 获取当前文件的属性 |
| CreationTime | 获取当前文件的创建时间 |
| Directory | 获取文件所属目录的一个实例 |
| Exists | 获取一个表示文件是否存在的布尔值 |
| Extension | 获取表示文件存在的字符串 |
| FullName | 获取文件的完整路径 |
| LastAccessTime | 获取当前文件最后被访问的时间 |
| LastWriteTime | 获取文件最后被写入的时间 |
| Length | 获取当前文件的大小,以字节为单位 |
| Name | 获取文件的名称 |
| public StreamWriter AppendText() | 创建一个 StreamWriter,追加文本到由 FileInfo 的实例表示的文件中 |
| public FileStream Create() | 创建一个文件 |
| public override void Delete() | 永久删除一个文件 |
| public void MoveTo(string destFileName) | 移动一个指定的文件到一个新的位置,提供选项来指定新的文件名 |
| public FileStream Open(FileMode mode) | 以指定的模式打开一个文件 |
| public FileStream Open(FileMode mode,FileAccess access) | 以指定的模式,使用 read、write 或 read/write 访问,来打开一个文件 |
| public FileStream Open(FileMode mode,FileAccess access,FileShare share) | 以指定的模式,使用 read、write 或 read/write 访问,以及指定的分享选项,来打开一个文件 |
| public FileStream OpenRead() | 创建一个只读的 FileStream |
| public FileStream OpenWrite() | 创建一个只写的 FileStream |
举例:
// 创建一个 DirectoryInfo 对象
DirectoryInfo dir = new DirectoryInfo(@"C:\Users\Administrator\Desktop\cs");
Console.WriteLine("获取当前目录的属性: {0}", dir.Attributes);
Console.WriteLine("获取当前目录的创建时间: {0}", dir.CreationTime);
Console.WriteLine("获取当前目录是否存在: {0}", dir.Exists);
Console.WriteLine("获取当前文件扩展名部分的字符串: {0}", dir.Extension);
Console.WriteLine("获取当前目录的完整路径: {0}", dir.FullName);
Console.WriteLine("获取上次访问当前目录的时间: {0}", dir.LastAccessTime);
Console.WriteLine("获取 DirectoryIndiro 实例的名称: {0}", dir.Name);// 获取目录中的文件以及它们的名称和大小
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{Console.WriteLine("文件名称:{0} ,大小:{1}", file.Name, file.Length);
}相关文章:
11. C#高级进阶
一、C# 异常处理 在 C# 中,异常是在程序运行出错时引发的,所有异常都派生自 System.Exception 类。异常处理就是处理运行时错误的过程,通过异常处理可以使程序在发生错误时保持正常运行。 C# 中的异常处理基于四个关键字构建,分别…...
网络编程套接字( TCP协议通讯流程)
目录 1、绑定失败问题 2、TCP协议通讯流程 三次握手的过程 数据传输的过程 四次挥手的过程 TCP和UDP对比 1、绑定失败问题 当我们测试网络代码时,先将服务端绑定8080端口运行,然后运行客户端,并让客户端连接当前服务器: 当有客户…...
WPF毛笔字实现过程
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
MHA实现mysql数据库高可用
目录 MHA原理 MHA工具包 MHA实现mysql高可用实战 MHA原理 ①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events) ②识别含有最新更新的slave ③应用差异的中继日志&…...
leetcode每日一题:55. 跳跃游戏
系列:贪心算法 语言:java 题目来源:Leetcode55. 跳跃游戏 题目 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1: 输…...
【C++】map 和 set
文章目录一、关联式容器与键值对1、关联式容器2、键值对 pair3、树形结构的关联式容器二、set1、set 的介绍2、set 的使用三、multiset四、map1、map 的介绍2、map 的使用五、multimap一、关联式容器与键值对 1、关联式容器 在C初阶的时候,我们已经接触了 STL 中的…...
基于SpringBoot的酒店管理系统
系统环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/i…...
JAVA框架知识整理
框架知识整理 SpringBoot、SpringMVC、Spring的区别和他们的作用? SpringBoot是一个微服务框架,其简化了Spring应用的创建、运行、测试、部署。使开发人员无需过多的关注XML配置。里面整合了许多框架例如SpringMVC、Spring Security和Spring Data JPA。…...
运算放大器:电压比较器
目录一、单限电压比较器二、滞回电压比较器三、窗口电压比较器最近在学习电机控制,遇到了与运算放大电路相关的知识,然而太久没有接触模拟电路,对该知识已经淡忘了,及时温故而知新,做好笔记,若有错误、不足…...
Linux的基础知识
根目录和家目录根目录:是Linux中最底层的目录,用"/"表示家目录:当前用户所在的路径,用“~”表示,root用户的家目录和普通用户的家目录不一样,普通用户的家目录在/home路径下,每一个用…...
【JavaEE】 IntelliJ IDEA 2022.2最新版Tomcat导入依赖详细教程全解及创建第一个Servlet程序
目录 一、软件资源 二、放置settings.xml文件 三、创建项目 四、引入依赖 五、创建目录 六、编写代码 写在前面:☞What is Servlet? Servlet其实是一种实现动态页面的技术。是一组由Tomcat提供给程序员的API(应用程序编程接口)…...
常见的卷积神经网络结构——分类、检测和分割
本文持续更新~~ 本文整理了近些年来常见的卷积神经网络结构,涵盖了计算机视觉领域的几大基本任务:分类任务、检测任务和分割任务。对于较复杂的网络,本文只会记录其中的核心模块以及重要的网络设计思想,并不会记录完整的网络结构。…...
20230323英语学习
Why Can You “Hear the Ocean” in Seashells? 为啥能在贝壳里“听见海的声音”? We’re told a number of stories as kids. One of the more harmless of these little lies is the one about seashells.You know the one: hold up a seashell to your ear, an…...
【粉丝投稿】上海某大厂的面试题,岗位是测开(25K*16)
简单介绍一句,大专出身,三年经验。跳了四次槽,面试了无数次,现在把自己的面试经验整理出来分享给大家,堪称必杀技! 1,一切从实际出发,对实际工作进行适当修饰 2,不会的简…...
shell简单使用介绍
脚本的基本元素声明,在解释并执行当前脚本文件中的语句之前,需要声明使用的命令解释器#一般写的解释器为 #!/bin/bash这里的#不再是注释了,而是必要的声明命令,也就是需要执行的语句注释,对代码进行解释说明分为单行注…...
RK3568平台开发系列讲解(调试篇)内核函数调用堆栈打印方法汇总
🚀返回专栏总目录 文章目录 一、dump_stack 函数二、WARN_ON(condition)函数三、BUG_ON (condition)函数四、panic (fmt...)函数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对驱动调试方法进行汇总学习。 一、dump_stack 函数 dump_stack 作用:打印内核调…...
一次内存泄露排查
前因: 因为测试 长时间压测导致 接口反应越来越慢,甚至 导致服务器 崩溃 排查过程 1、top 查看是 哪个进程 占用 内存过高 2、根据 进程 id 去查找 具体是哪个 程序的问题 ps -ef| grep 41356 可以看到 具体的 容器位置 排查该进程 对象存活 状态…...
「Mac安装ps」Adobo Photoshop 2023 下载安装详情教程,支持 AI 插件的 24 版 Photoshop
前言 Adobo Photoshop 2023 已推出,由于目前AI人工智能技术火爆,而很多的 AI 插件最低也需要24版的 photoshop ,所以这里我遍搜集并整理了此新版本的 photoshop 安装使用教程,后续也将提供 AI 插件的下载安装教程 安装文件下载 …...
Redis单线程还是多线程?IO多路复用原理
目录专栏导读一、Redis版本迭代二、Redis4.0之前为什么一直采用单线程?三、Redis6.0引入多线程四、Redis主线程和IO线程是如何完成请求的?1、服务端和客户端建立socket连接2、IO线程读取并解析请求3、主线程执行请求命令4、IO线程会写回socket和主线程清…...
小菜鸟Python历险记:(第五集)
今天写的文章是记录我从零开始学习Python的全过程。在Python中对方法进行备注的时候,往往都是写在方法中的第一行所在位置。在书写注释以后,在调用方法的时候,鼠标点击方法会有一个浮动的提示显示备注内容。具体如下图所示:注释的…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
