前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#中Enum用法小结

C#中Enum用法小结

作者头像
zls365
发布2020-08-19 14:38:17
4K0
发布2020-08-19 14:38:17
举报
文章被收录于专栏:CSharp编程大全

enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储。

(1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此以下两个代码定义是等价的:

代码语言:javascript
复制
 enum TrafficLight

{  
 Green,  
 Yellow,  
 Red  
}   
代码语言:javascript
复制
 enum TrafficLight  
{  
 Green = 0,  
 Yellow = 1,  
Red = 2  
}  

(2)enum枚举类型的变量的名字不能相同,但是值可以相同,例如:

代码语言:javascript
复制
enum TrafficLight

{  
Green = 0,  
Yellow = 1,     // Duplicate value, OK   
Red = 1         // Duplicate value, OK   
}

(3)如果enum中的部分成员显式定义了值,而部分没有;那么没有定义值的成员还是会按照上一个成员的值来递增赋值,例如:

代码语言:javascript
复制
 enum LoopType  
{  
  None,          // value is 0    
 Daily,         // value is 1    
 Weekly = 7,  
 Monthly,       // value is 8    
Yeayly,        // value is 9    
  DayGap = 15,           
  WeekGap,       // value is 16    
 MonthGap,      // value is 17    
YearGap        // value is 18    
}

(4)enum枚举成员可以用来作为位标志,同时支持位的操作(位与,位或等等),例如:

代码语言:javascript
复制
 enum CardDeckSettings : uint  
{  
 SingleDeck = 0x01,      // Bit 0  
 LargePictures = 0x02,   // Bit 1  
FancyNumbers = 0x04,    // Bit 2  
Animation = 0x08        // Bit 3      
}

十六进制数的一个作用就是用来进行位运算和操作,很方便。

1. 枚举(enum type)通常用来表示一组常量。由于枚举是强类型的,这在编程中给我们提供了极大的方便。

2. 枚举的定义:

代码语言:javascript
复制
 public enum Sex
        {
            男 = 0,
            女 = 1
        }

或者:如果只给男赋值,那么女=1

代码语言:javascript
复制
 public enum Sex
        {
            男 = 0,
            女
        }

枚举的优点: <1>枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。 <2>枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。 <3>枚举使代码更易于键入。在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可能的值

枚举在软件开发中的使用场景

在数据库设计人员表(person)时有性别字段Sex(0代表男,1代表女),我们一般用bit或者int类型表示。

1.在编程时我们给Sex字段赋值的方式为:

1). Sex=0;

2). Sex=(int)SexEnum.Man;

其中SexEnum为定义性别的枚举类型,我们可以看出第二种方式的可读性更强。

2.在编程时我们,如果Sex字段作为一个搜索条件的话,我们可能需要以下拉选择的方式展现所有可以选择的情况。那么我们就需要将SexEnum转换成一个字典集合然后绑定到对应的select标签,具体怎么实现请看下面的示例代码。

………………………………

enum、int、string三种类型之间的互转

执行结果如下:

代码语言:javascript
复制
枚举实例

  声明:



public enum TimeOfDay
{
    Moning = 0,
    Afternoon = 1,
    Evening = 2,
};


  使用:



    public string getTimeOfDay(TimeOfDay time)
    {
        string result = string.Empty;
        switch (time)
        {
            case TimeOfDay.Moning:
                result = "上午";
                break;
            case TimeOfDay.Afternoon:
                result = "下午";
                break;
            case TimeOfDay.Evening:
                result = "晚上";
                break;
            default:
                result = "未知";
                break;
        }
        return result;
    }

枚举方法 <1>获取枚举字符串 TimeOfDay time = TimeOfDay.Afternoon; Console.WriteLine(time.ToString());//输出:Afternoon <2>Enum.Parse()方法。这个方法带3个参数,第一个参数是要使用的枚举类型。其语法是关键字typeof后跟放在括号中的枚举类名。typeof运算符将在第5章详细论述。第二个参数是要转换的字符串,第三个参数是一个bool,指定在进行转换时是否忽略大小写。最后,注意Enum.Parse()方法实际上返回一个对象引用—— 我们需要把这个字符串显式转换为需要的枚举类型(这是一个取消装箱操作的例子)。对于上面的代码,将返回1,作为一个对象,对应于TimeOfDay.Afternoon的枚举值。在显式转换为int时,会再次生成1。 TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true); Console.WriteLine((int)time2);//输出1 <3>得到枚举的某一值对应的名称 lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0); <4>得到枚举的所有的值 foreach (int i in Enum.GetValues(typeof(TimeOfDay))) lbValues.Text += i.ToString(); <5>枚举所有的名称 foreach(string temp in Enum.GetNames(typeof(TimeOfDay))) lbNames.Text+=temp;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 枚举在软件开发中的使用场景
  • enum、int、string三种类型之间的互转
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档