跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

了解 C# 设置标志枚举:分配标志

Tim Corey
9m 57s

在 C# 中处理权限、配置或设置时,我们经常会遇到需要在单个变量中存储多个值的情况。 我们可以使用标志枚举来代替为每个设置使用单独的布尔值。 该方法利用二进制操作有效管理单个整数值中的多个选项。

在本文中,我们将根据 Tim Corey 的视频 Binary in C# 深入探讨如何在 C# 中设置标志枚举:在 10 分钟或更短时间内分配标志。 Tim 将讲解如何使用二进制操作赋值,从而提高代码的效率和可读性。 让我们深入了解。

标志枚举简介

Tim 首先解释说,本课是关于理解 C# 中二进制的系列课程的一部分。 在这段视频中,他重点介绍了如何使用二进制操作分配标志。 标志允许我们在一个整数中存储多个值,从而使权限管理变得更加简单和高效。

使用位顺时针 OR 分配多个标志

Tim 演示了如何使用位顺时针 OR (......)组合多个权限。|) 运算符。 他创建了一个枚举SystemPermissions,其中包括不同的权限级别,例如SQL、Redis和BuildSystem。 我们可以将所有权限存储在一个值中,而不是使用多个变量。

为变量分配多个权限的示例:

// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;

// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;

// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);

显示二进制表示法

为了更好地理解发生了什么,Tim建议使用Convert.ToString(value, 2)将整数值转换为其二进制形式。 这可以让我们直观地看到哪些位被设置:

// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));

这表明不同的位位置对应不同的权限,展示了我们如何在一个整数中存储多种设置。

使用 OR-Equals 添加更多权限

Tim 解释说,我们可以使用".NET "和 "Python "动态添加更多权限。|=` 运算符:

// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;

// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;

// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);

了解 32 位限制

Tim 强调了一个重要的注意事项:C# 中的整数数据类型有 32 位限制。 这意味着我们只能在int中存储最多32个唯一标志。 如果我们需要超过32个标志,我们应该考虑使用long(64位)或甚至多个值。 不过,在大多数情况下,32 个标记绰绰有余。

在数据库中存储标记

使用标志枚举的最大优势之一是可以将其有效地存储在数据库中。 我们可以存储一个代表所有权限的整数值,而不是存储多个布尔列。 Tim 解释说,这种方法大大降低了数据库的复杂性和存储要求。

例如,如果TimPermissions存储为37,它代表了以下组合:

  • SQL(第 1 位)
  • Redis(第 3 位)
  • 构建系统(第 5 位)

当我们从数据库中检索到这个值时,我们可以很容易地对其进行解码,以确定活动权限。

结论

最后,Tim 强调了 Flag Enums 的强大功能。 使用二进制操作,我们可以在一个整数中有效地管理多个状态。 这种技术可以提高性能,简化数据存储,并使我们的代码更具可读性。

按照这种方法,您可以使用 C# Flag Enums 实现一个简洁、可扩展的权限管理系统。 请观看完整的 视频,以便更好地理解。

Hero Worlddot related to 了解 C# 设置标志枚举:分配标志
Hero Affiliate related to 了解 C# 设置标志枚举:分配标志

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我