C#常量(const)与枚举(enum)使用指南

一、 常量 (const)

常量,就是一个其值在程序编译时就已经确定,并且在整个运行期间都不能被修改的量。

如何声明常量?

使用 const 关键字进行声明,并且必须在声明时就进行初始化。

csharp 复制代码
const double PI = 3.14159;
const int DAYS_IN_WEEK = 7;
const string AppVersion = "1.0.2";

命名约定:常量的名称通常使用全大写字母,并用下划线分隔单词,以示区别。

const vs readonly

你可能还会遇到 readonly (只读) 关键字,它与 const 类似但有一个关键区别:

  • const 的值必须在编译时确定。
  • readonly 的值可以在运行时确定(在构造函数中赋值),但一旦赋值后就不能再更改。
csharp 复制代码
public class Config
{
    // 编译时常量
    public const int DefaultTimeout = 5000; 

    // 运行时只读字段
    public readonly DateTime CreationTime;

    public Config()
    {
        // readonly 字段可以在构造函数中初始化
        CreationTime = DateTime.Now; 
    }
}

二、 枚举 (enum)

枚举 (enum)允许我们定义一个由一组命名的常量组成的集合,这个集合本身成为一个新的类型。

如何声明和使用枚举?

使用 enum 关键字来定义。

csharp 复制代码
// 定义一个订单状态的枚举
public enum OrderStatus
{
    Pending,    // 待处理
    Processing, // 处理中
    Shipped,    // 已发货
    Completed,  // 已完成
    Cancelled   // 已取消
}

现在,OrderStatus 就成了一个新的数据类型。我们可以这样使用它:

csharp 复制代码
// 声明一个枚举类型的变量
OrderStatus currentStatus = OrderStatus.Pending;

// 在逻辑判断中使用,代码清晰易读
if (currentStatus == OrderStatus.Shipped)
{
    Console.WriteLine("订单已发货!");
}

// 在 switch 语句中使用,是枚举的最佳拍档
switch (currentStatus)
{
    case OrderStatus.Pending:
        // ...
        break;
    case OrderStatus.Processing:
        // ...
        break;
    // ... 其他状态
    default:
        // ...
        break;
}

枚举的优势:

  1. 强类型安全 :你不能将一个随意的整数赋给一个枚举变量,编译器会阻止你犯错。这避免了将无效的状态码(比如 orderStatus = 10)赋给变量的可能。
  2. 极佳的可读性OrderStatus.Completed 清晰地表达了其含义,而数字 3 则不能。你的代码会变得"自解释"。
  3. 智能提示(IntelliSense):在Visual Studio等IDE中,当你输入枚举变量时,会自动提示所有可用的成员,极大提高了开发效率并减少了拼写错误。

枚举的底层机制

默认情况下,枚举的每个成员都对应一个整数,从0开始依次递增 (Pending 是 0, Processing 是 1, ...)。你也可以显式地为它们指定值,或者更改其底层的类型(默认为 int)。

csharp 复制代码
public enum ErrorCode : ushort // 可以指定底层类型
{
    None = 0,
    NotFound = 404,
    InternalServerError = 500,
    AccessDenied = 403
}

结语

点个赞,关注我获取更多实用 C# 技术干货!如果觉得有用,记得收藏本文!

相关推荐
Setsuna_F_Seiei3 小时前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财4 小时前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
郑州光合科技余经理5 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡5 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
zxy28472253016 小时前
C# 音频倍速播放
c#·音频·naudio·soundtouch·倍速
yume_sibai7 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
计算机魔术师8 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy1288 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
计算机魔术师8 小时前
CEO说要慢下来,黑客说别做梦了——同一篇论文,两种命运
前端
kyriewen9 小时前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员