深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
C# 枚举
枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。
要创建枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔枚举项:
enum Level
{
Low,
Medium,
High
}
您可以使用点语法访问枚举项:
Level myVar = Level.Medium;
Console.WriteLine(myVar);
Enum 是 "enumerations" 的缩写,意思是“特定列举”。
在类内部定义枚举也是可行的:
class Program
{
enum Level
{
Low,
Medium,
High
}
static void Main(string[] args)
{
Level myVar = Level.Medium;
Console.WriteLine(myVar);
}
}
输出将为:
Medium
枚举值
默认情况下,枚举的第一项的值为 0。第二项的值为 1,依此类推。
要从项中获取整数值,必须显式将项转换为 int:
enum Months
{
January, // 0
February, // 1
March, // 2
April, // 3
May, // 4
June, // 5
July // 6
}
static void Main(string[] args)
{
int myNum = (int) Months.April;
Console.WriteLine(myNum);
}
输出将为:
3
您还可以分配自己的枚举值,接下来的项将相应地更新它们的数字:
enum Months
{
January, // 0
February, // 1
March=6, // 6
April, // 7
May, // 8
June, // 9
July // 10
}
static void Main(string[] args)
{
int myNum = (int) Months.April;
Console.WriteLine(myNum);
}
输出将为:
7
在 Switch 语句中使用枚举
枚举通常在 switch 语句中用于检查相应的值:
enum Level
{
Low,
Medium,
High
}
static void Main(string[] args)
{
Level myVar = Level.Medium;
switch(myVar)
{
case Level.Low:
Console.WriteLine("低级别");
break;
case Level.Medium:
Console.WriteLine("中级别");
break;
case Level.High:
Console.WriteLine("高级别");
break;
}
}
输出将为:
中级别
何时以及为什么使用枚举?
在有些情况下,当您知道值不会更改时,例如月份、日期、颜色、扑克牌等时,请使用枚举。
C# 文件
处理文件
System.IO 命名空间中的 File 类允许我们处理文件:
using System.IO; // 包含 System.IO 命名空间
File.SomeFileMethod(); // 使用带有方法的 File 类
File 类具有许多有用的方法,用于创建文件和获取有关文件的信息。例如:
| 方法 | 描述 |
|---|---|
AppendText() |
在现有文件的末尾追加文本 |
Copy() |
复制文件 |
Create() |
创建或覆盖文件 |
Delete() |
删除文件 |
Exists() |
测试文件是否存在 |
ReadAllText() |
读取文件的内容 |
Replace() |
用另一个文件的内容替换文件的内容 |
WriteAllText() |
创建新文件并将内容写入其中。如果文件已存在,将覆盖它。 |
有关 File 方法的完整列表,请参阅 Microsoft .Net File Class 参考文档.
写入文件并读取它
在以下示例中,我们使用 WriteAllText() 方法创建一个名为 "filename.txt" 的文件,并向其中写入一些内容。然后,我们使用 ReadAllText() 方法读取文件的内容:
using System.IO; // 包含 System.IO 命名空间
string writeText = "Hello World!"; // 创建一个文本字符串
File.WriteAllText("filename.txt", writeText); // 创建文件并将 writeText 的内容写入其中
string readText = File.ReadAllText("filename.txt"); // 读取文件的内容
Console.WriteLine(readText); // 输出内容
输出将为:
Hello World!
C# 异常
在执行 C# 代码时,可能会发生不同类型的错误:由程序员制造的编码错误,由于错误的输入或其他不可预见的事物而导致的错误。
当发生错误时,C# 通常会停止执行并生成错误消息。这种情况的技术术语是:C# 会引发异常(抛出错误)。
C# try 和 catch
try 语句允许您定义一块在执行过程中测试错误的代码块。
catch 语句允许您定义一块在 try 块中发生错误时执行的代码块。
try 和 catch 关键字是成对出现的:
try
{
// 试图执行的代码块
}
catch (Exception e)
{
// 处理错误的代码块
}
考虑以下示例,我们在其中创建一个包含三个整数的数组:
这将生成一个错误,因为 myNumbers[10] 不存在。
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!
错误消息将类似于:
System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
如果发生错误,我们可以使用 try...catch 来捕获错误并执行一些代码来处理它。
在以下示例中,我们在 catch 块中使用变量(e)以及内置的 Message 属性,该属性输出描述异常的消息:
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
输出将为:
Index was outside the bounds of the array.
您还可以输出自己的错误消息:
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
输出将为:
Something went wrong.
finally 块
finally 语句允许您在 try...catch 之后执行代码,无论结果如何:
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
finally
{
Console.WriteLine("The 'try catch' is finished.");
}
输出将为:
Something went wrong.
The 'try catch' is finished.
throw 关键字
throw 语句允许您创建自定义错误。
throw 语句与异常类一起使用。在 C# 中有许多异常类可用:ArithmeticException、FileNotFoundException、IndexOutOfRangeException、TimeOutException 等:
static void checkAge(int age)
{
if (age < 18)
{
throw new ArithmeticException("Access denied - You must be at least 18 years old.");
}
else
{
Console.WriteLine("Access granted - You are old enough!");
}
}
static void Main(string[] args)
{
checkAge(15);
}
程序中显示的错误消息将为:
System.ArithmeticException: 'Access denied - You must be at least 18 years old.'
如果 age 为 20,则不会引发异常:
checkAge(20);
输出将为:
Access granted - You are old enough!
C# 如何相加两个数字
学习如何在 C# 中相加两个数字:
// 示例
int x = 5;
int y = 6;
int sum = x + y;
Console.WriteLine(sum); // 打印 x + y 的和
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
深入理解 C# 编程:枚举、文件处理、异常处理和数字相加的更多相关文章
- Java 雇员管理小练习(理解面向对象编程)
在学习集合框架的时候,初学者很容易练习到学生管理系统.雇员管理体统等练习题.在学习集合框架之前,基本上Java基本语法都学完了,集合框架也从侧面的检验对前面学习的理解.下面用一个曾经做过的练习题,回顾 ...
- Windows环境下用C#编程将文件上传至阿里云OSS笔记
Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...
- 【UNIX环境高级编程】文件I/O
[UNIX环境高级编程]文件I/O大多数文件I/O只需要5个函数: open.read.write.lseek以及close 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用 1 ...
- shell 递归枚举文件并操作
递归枚举文件并操作 #!/bin/bash CURDIR=$(cd $(dirname $0); pwd) export GOPATH=$CURDIR/.. echo GOPATH=$GOPATH c ...
- Unix网络编程 — 头文件解析
1.1. < sys/types.h > primitive system data types(包含很多类型重定义,如pid_t.int8_t等) 1.2. < sys/socke ...
- 聊聊高并发(十九)理解并发编程的几种"性" -- 可见性,有序性,原子性
这篇的主题本应该放在最初的几篇.讨论的是并发编程最基础的几个核心概念.可是这几个概念又牵扯到非常多的实际技术.比方Java内存模型.各种锁的实现,volatile的实现.原子变量等等,每个都可以展开写 ...
- linux系统编程之文件与io(四)
今天继续学习文件与io,主要是学习文件共享及文件.复制文件描述符,有点抽象,主要是概念上的理解,但是很重要,下面一一来分解: 文件共享: 回顾一下,在linux系统调用中,是通过文件描述符来访问文件的 ...
- 理解函数式编程中的函数组合--Monoids(二)
使用函数式语言来建立领域模型--类型组合 理解函数式编程语言中的组合--前言(一) 理解函数式编程中的函数组合--Monoids(二) 继上篇文章引出<范畴论>之后,我准备通过几篇文章,来 ...
- python-IO编程,文件读写
一.文件读写 1.打开文件 函数:open(name[. mode[. buffering]]) 参数: name:必须:文件的文件名(全路径或执行文件的相对路径.)) mode:可选:对文件的读写模 ...
- python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数
练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() #列 ...
随机推荐
- 【Azure Developer】在微软云中国区,如何使用Microsoft GraphAPI连接到B2C Tenant
问题描述 如题所述,当在中国区使用Microsoft GraphAPI连接B2C Tenant时候,如何来设置中国区的Endpoint呢?在GitHub的示例中,并没有示例介绍如何连接中国区.如 问题 ...
- 浅入ABP(2):添加基础集成服务
浅入ABP(2):添加基础集成服务 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入ABP(2):添加基础集成服务 定义一个特性标记 全局统一消息格式 ...
- Java //使用scanner从键盘输入多种类型
1 //1.引入包名 import java.util.Scanner 2 //2.新建Scanner对象 3 Scanner scan = new Scanner(system.in); 4 //3 ...
- 使用 libreoffice 批量化转化文件为 .pdf 并合并
介绍使用 libreoffice 批量化将文件转化为 .pdf 然后合并.pdf文件的方法 很多人知道,在 Linux 系统中 WPS 是办公软件中很棒的选择.但其实 libreoffice 也是一个 ...
- ubuntu16.04 关闭系统的屏幕阅读功能
在安装audacity的时候,不知道点到哪里,电脑突然就不停的"Chinese Letter",后面仔细听,鼠标点到那里就会读那里文字,键盘输入也是,联想到Android上也有类似 ...
- github拉项目显示timeOut
参考:https://blog.csdn.net/qq_37424778/article/details/132018804 自己尝试在github上拉项目,但是报错LibreSSL SSL_read ...
- 推荐一款idea神级免费插件【Bito-ChatGPT】
今天推荐一款IDEA 插件神器:Bito-ChatGPT,在 IDEA 中安装直接可以使用 GPT,不需要使用魔法! 还有很重要的一点这个插件完全免费,且不限次数(目前是免费不限制次数). 环境要求: ...
- StableSwarmUI:功能强大且易于使用的Stable Diffusion WebUI
StableSwarmUI是一个模块化和可定制的Stable Diffusion WebUI,最近发布了0.6.1-Beta版本.这个开源项目,托管在GitHub上:https://github.co ...
- 你是怎么理解ES6中Proxy的?使用场景?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.介绍 定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta pro ...
- 开发必会系列:J2EE是什么
为什么Java是跨平台的? 高级语言通过编译器,转为汇编语言,汇编语言通过汇编器转为0和1. 当c转为汇编时,不同厂家cpu,用不同的指令集,所以有不同的汇编语言结果,导致c不能跨平台. java在各 ...