c#的枚举
public enum StatusCode { OK = 200, // 自定义值 NotFound = 404, // 自定义值 Unauthorized = 401, // 自定义值 Forbidden = 403 // 自定义值 }
(int)StatusCode.OK
(StatusCode)404
枚举常用方法
Enum.GetValues(Type)
:返回枚举类型的所有值。Enum.GetNames(Type)
:返回枚举类型的所有成员名称。Enum.IsDefined(Type, Object)
:检查指定的值是否是枚举类型中的有效值。
枚举与位标志
Read = 1
(二进制0001
)Write = 2
(二进制0010
)Execute = 4
(二进制0100
)Delete = 8
(二进制1000
)
using System;
[Flags] // 指示这是一个位标志枚举
public enum Permissions
{
None = 0, // 0,表示没有任何权限
Read = 1, // 1,表示读取权限
Write = 2, // 2,表示写入权限
Execute = 4, // 4,表示执行权限
Delete = 8 // 8,表示删除权限
}public class Program
{
public static void Main()
{
// 用户具有读取和写入权限(Read | Write)
Permissions userPermissions = Permissions.Read | Permissions.Write;// 输出当前权限的二进制表示
Console.WriteLine(userPermissions); // 输出 Read, Write// 判断用户是否具有执行权限
bool hasExecutePermission = (userPermissions & Permissions.Execute) == Permissions.Execute;
Console.WriteLine($"User has execute permission: {hasExecutePermission}"); // 输出 False// 启用删除权限
userPermissions |= Permissions.Delete; // 使用按位或操作符// 输出更新后的权限
Console.WriteLine(userPermissions); // 输出 Read, Write, Delete// 禁用写入权限
userPermissions &= ~Permissions.Write; // 使用按位非操作符清除写入权限// 输出更新后的权限
Console.WriteLine(userPermissions); // 输出 Read, Delete
}
}解释:
- 在
Permissions
枚举中,每个权限对应一个二进制位(Read = 1
,Write = 2
,Execute = 4
,Delete = 8
)。 - 通过位运算符
|
(按位或),我们可以将多个权限组合成一个权限集。例如,Read | Write
会组合成一个用户既有读取权限,又有写入权限。 - 使用
&
(按位与)运算符可以检查某个权限是否存在。如果userPermissions & Permissions.Execute
的结果是Permissions.Execute
,表示用户具有执行权限。 - 使用
&= ~Permissions.Write
可以禁用写入权限,~
操作符用于反转位(清除写入权限位)。
位标志的优点
- 内存高效:所有的标志可以存储在一个整数中,例如一个
int
类型的变量。通常一个int
有 32 位,因此最多可以表示 32 个标志。 - 快速操作:位运算非常高效,尤其是在需要频繁检查或修改多个标志时。
- 便于组合和清除:通过简单的按位运算,你可以轻松地组合多个状态,或者清除某个特定的状态。
- 扩展性强:位标志能够很好地扩展。当你需要新增权限或选项时,只需要分配一个新的二进制位,不会影响原有的标志位。
总结
- 位标志是通过二进制位来表示多个独立的选项或状态,并使用位运算符(如按位与、按位或、按位异或等)来对其进行组合、清除、切换等操作。
- 位标志常用于权限控制、状态管理、设置选项等场景,具有高效、节省内存等优点。
- 通过
Flags
特性,C# 中的枚举可以很方便地作为位标志使用。
位标志提供了强大的功能,尤其在涉及到多个选项或状态的场景中,它是非常有用且高效的。
- 在
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律