深入理解 C# 编程:枚举、文件处理、异常处理和数字相加

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。要创建枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔枚举项:

C# 枚举

枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。

要创建枚举,请使用 enum 关键字(而不是 classinterface),并用逗号分隔枚举项:

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 块中发生错误时执行的代码块。

trycatch 关键字是成对出现的:

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# 中有许多异常类可用:ArithmeticExceptionFileNotFoundExceptionIndexOutOfRangeExceptionTimeOutException 等:

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,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关文章
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
22 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
78 0
|
6天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
6天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
|
7天前
|
IDE 程序员 C#
C#编程入门:从零开始的旅程
【4月更文挑战第20天】本文引导初学者入门C#编程,从环境搭建开始,推荐使用Visual Studio Community版作为IDE。接着,通过编写&quot;Hello, World!&quot;程序,介绍基本语法,包括数据类型、运算符和表达式。文章还涉及控制结构、函数和方法,以及面向对象编程概念。通过学习,读者将对C#有初步了解,并激发进一步探索编程世界的兴趣。
|
7天前
|
开发框架 .NET Java
探索 C#编程的奥秘与魅力
【4月更文挑战第20天】C#是微软开发的现代、面向对象的编程语言,以其简洁语法、强大功能和跨平台支持脱颖而出。它支持自动垃圾回收、泛型、委托、LINQ,并广泛应用于桌面、Web、移动和游戏开发。C#拥有活跃的开发者社区和丰富的资源,是Unity游戏开发的首选语言。随着.NET Core,C#可在多个操作系统上运行,持续创新,未来发展潜力巨大。
|
7天前
|
缓存 算法 测试技术
优化 C#编程性能的策略
【4月更文挑战第20天】优化C#性能策略包括:选择合适算法和数据结构,避免频繁对象创建,缓存常用数据,减少内存分配,使用异步编程,优化数据库操作(如合理查询和使用索引),利用多线程并行处理,精简代码,使用性能分析工具,硬件升级,以及进行性能测试。综合应用这些策略可提升程序性能和响应性。
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
59 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
数据采集 前端开发 C#
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
Twitter是全球最大的社交媒体平台之一,包含丰富的音频资源。用户可以在Twitter上发布、转发、评论和收听各种音频内容,如音乐、播客、新闻、故事等,直接从Twitter抓取音频数据并非易事,尤其是在考虑到可能的封锁和反爬虫机制。Twitter会对频繁访问的IP地址进行限制或封禁,以防止恶意爬虫的行为。因此,我们需要使用一些技术手段来规避这些障碍,确保稳定而高效的数据访问。
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频

热门文章

最新文章