当前位置: 首页 > news >正文

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中对方法进行备注的时候,往往都是写在方法中的第一行所在位置。在书写注释以后,在调用方法的时候,鼠标点击方法会有一个浮动的提示显示备注内容。具体如下图所示:注释的…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...