枚举操作

发布日期:2026-07-14 19:00:07   来源 : 杭州电子商务研究院    浏览量 :5
杭州电子商务研究院 发布日期:2026-07-14 19:00:07  
5

介绍

对于来自不同语言的程序员来说,枚举并不是一个新概念。如果我们简单地说,枚举只是一个用友好名称表示的整数值列表。就是这样。这些是类似的结构,但只有整数可以存储在枚举值中。在​​您了解枚举之后,我们将开始解释调试过程。由于每个代码的开发周期都包含一部分时间来测试/调试/修复语义错误的代码。有时你会发现需要修复的逻辑错误,没有代码在第一次尝试时是完美的;尽管每个人都试图做到这一点。错误不是一件需要害羞的事情,它们会发生。不过,最好在它们投入生产之前就发现它们。

没有枚举

假设您想使用枚举来描述服务器的层级。层级是一个逻辑桶,它突出显示了服务器的重要性,从零开始,零表示最不重要,三表示最重要。

      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

当您想利用枚举的魔力创建可配置的应用程序时,您可以为每个标签分配值,或者让构造函数为您决定,这一事实非常方便

结论

枚举是开发人员工具集中的强大工具。它使我们能够编写优雅且易于理解的代码。由于数据结构易于扩展,因此可以轻松进行修改,但您不必修改代码即可为枚举添加新标签。特殊的按位枚举还提供了以更灵活但更持久的方式重组代码的功能和可能性。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据