枚举操作
介绍
对于来自不同语言的程序员来说,枚举并不是一个新概念。如果我们简单地说,枚举只是一个用友好名称表示的整数值列表。就是这样。这些是类似的结构,但只有整数可以存储在枚举值中。在您了解枚举之后,我们将开始解释调试过程。由于每个代码的开发周期都包含一部分时间来测试/调试/修复语义错误的代码。有时你会发现需要修复的逻辑错误,没有代码在第一次尝试时是完美的;尽管每个人都试图做到这一点。错误不是一件需要害羞的事情,它们会发生。不过,最好在它们投入生产之前就发现它们。
没有枚举
假设您想使用枚举来描述服务器的层级。层级是一个逻辑桶,它突出显示了服务器的重要性,从零开始,零表示最不重要,三表示最重要。
public int None = 0;
public int Development = 1;
public int Testing = 2;
public int Production = 3;
这反过来又可用于在实例化服务器类时分配优先级。假设我们的服务器类如下所示。我们为服务器命名并赋予其优先级。如果我们想将服务器从开发层提升到测试层,因为由于容量管理原因,机器从一个房间移到另一个房间,会发生什么?简单地调用 instance.Priority ++是不明智的。这会导致一个非常有趣的结果。
class Server
{
public Server(int tier, string name) {
this.Name = name;
this.Priority = (int)tier;
}
}
输入枚举
如果我们想创建更强大的代码,我们应该执行以下操作。 None将代表开发人员用于工作或其他用途的私人机器。
public enum Tiers {
None,
Development,
Testing,
Production
}
这就是整数值列表概念的用武之地。在幕后,枚举从零开始为标签分配值。我们如何从枚举中获取值?此代码片段向您揭示了与每个项目关联的值。
foreach (var level in Enum.GetValues(typeof(Tiers)))
{ Console.WriteLine("The tier: " + level + " has value of " + (int)level); }
输出将会像这样:
The tier: None has value of 0
The tier: Development has value of 1
The tier: Testing has value of 2
The tier: Production has value of 3
如果您愿意,您可以打破分配给每个标签的数字的顺序。
public enum Tiers {
None,
Development = 10,
Testing,
Production
}
重新枚举项目会得到以下结果。这意味着,从开发层开始,我们想要从 10 开始增加数字的值。
The tier: None has a value of 0
The tier: Development has a value of 10
The tier: Testing has a value of 11
The tier: Production has a value of 12
这允许您根据需要自定义枚举。游戏开发人员经常使用它来存储攻击、等级或我们的英雄可能拥有的任何其他类型的可枚举属性。
标准枚举面临的第一个限制是它们一次只能保存一个值。如果我们想为服务器或其他属性添加更多层级,并且想要拥有一个生产层级的组合服务器,但实际上,开发人员进行了一些新功能测试,因此None也适用,会发生什么情况?
按位枚举
很多开发人员都使用上述枚举,但它的作用远不止于此。标准枚举带来的限制的解决方案是[Flags]。让我们修改一下原始枚举。
Flags]public enum BitTiers {
None = 1
为了使用[Flags],我们需要使用单个值和组合值。对于单个值,它们将是2的幂。组合值将来自|字符表示的逻辑或表达式。
为了理解这一点,我们需要查看原始和按位枚举的这些项的二进制值。
原始二进制值:
public enum Tiers {
None, //000000
Development, //000001
Testing, //000010
Production //000011
}
二进制按位的值:
Flags]public enum BitTiers {
None = 1
让我们使用这个foreach来完成繁重的工作。
foreach (var level in Enum.GetValues(typeof(BitTiers)))
{ Console.WriteLine("The tier: " + level + " has value of " + (int)level); }
迭代这些值我们可以看到以下输出。
The tier: None has a value of 1
The tier: Development has a value of 2
The tier: AlmostDevelopment has a value of 3
The tier: Testing has a value of 4
The tier: AlmostTesting has a value of 5
The tier: Production has a value of 8
The tier: AlmostProd has a value of 9
Almost标签的值从何而来?我们以AlmostTesting为例。
它由000100(测试)和000001 (无)之间的逻辑或表达式组成。或逻辑运算符的真值表如下。
一个 | 乙 | A 或 B |
---|---|---|
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
0 | 0 | 0 |
当您想利用枚举的魔力创建可配置的应用程序时,您可以为每个标签分配值,或者让构造函数为您决定,这一事实非常方便。
结论
枚举是开发人员工具集中的强大工具。它使我们能够编写优雅且易于理解的代码。由于数据结构易于扩展,因此可以轻松进行修改,但您不必修改代码即可为枚举添加新标签。特殊的按位枚举还提供了以更灵活但更持久的方式重组代码的功能和可能性。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~