C#枚举的简单使用
枚举这个名词大家都听过,很多小伙伴也使用过,
那么枚举在开发中能做什么,使用它后能给程序代码带来什么改变,为什么用枚举。
各位看官且坐下,听我一一道来。
为什么使用枚举?
1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。
2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。
3、枚举使代码更易输入和读取。
枚举有哪些用法?
1、简单枚举
2、标志枚举
1、简单枚举
- 枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。
- 枚举是值类型,隐式继承自System.Enum,不能手动修改。System.Enum本身是引用类型,继承自System.ValueType。
- 枚举都是隐式密封的,不允许作为基类派生子类。
- 枚举类型的枚举成员均为静态,且默认为Int32类型。
- 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的底层数据类型。每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内。如果没有明确指定底层数据类型则默认的数据类型是int类型。
- 枚举成员不能相同,但枚举的值可以相同。
- 枚举最后一个成员的逗号和大括号后面的分号可以省略
C#提供类一个类来方便操作枚举,下面给出这个类的常用方法:
| 方法 | 名称 |
| CompareTo | 将此实例与指定对象进行比较并返回一个对二者的相对值的指示 |
| Equals | 指示此实例是否等于指定的对象 |
| Format | 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式 |
| GetName | 在指定枚举中检索具有指定值的常数的名称 |
| GetNames | 检索指定枚举中常数名称的数组 |
| GetNames | 检索指定枚举中常数名称的数组 |
| GetTypeCode | 返回此实例的基础 TypeCode |
| GetUnderlyingType | 返回指定枚举的基础类型 |
| GetValues | 索指定枚举中常数值的数组 |
| HasFlag | 确定当前实例中是否设置了一个或多个位域 |
| IsDefined | 返回指定枚举中是否存在具有指定值的常数的指示 |
| Parse |
将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 一个参数指定该操作是否不区分大小写 |
| TryParse |
将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值 |
如果要显示指定枚举的底层数据类型很简单,只需在声明枚举的时候加个冒号,后面紧跟要指定的数据类型(可指定类型有:byte、sbyte、short、ushort、int、uint、long、ulong)。
显式设置枚举的成员常量值,默认是从0开始,逐个递增的。但是以下例子却设置成了1,2,3,0。而且成员值可以一样的。
如下示例:由枚举值获取枚举名称与由枚举名称获取枚举值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace enumApplication
{
class Program
{
static void Main(string[] args)
{
//输出方式一:
Console.WriteLine("我是四大名著之一的:" + Enum.GetName(typeof(Man), )); //西游记(是哪个名著由值获取) //输出方式二:
string[] array1 = Enum.GetNames(typeof(Man));
Console.WriteLine("我是四大名著之一的:" + array1[]); //红楼梦(是哪个名著由值获取) //输出方式三:
Array array2 = Enum.GetValues(typeof(Man));
Console.WriteLine("我是四大名著之一的:" + array2.GetValue()); //三国演义(是哪个名著由值获取) //输出方式四:
Type t = Enum.GetUnderlyingType(typeof(Man));
Console.WriteLine("我输出的是值类型:"+t); //输出 Int32 //输出方式五:由值获取内容
int i = ;
string Name = Enum.Parse(typeof(Man), i.ToString()).ToString(); //此时 Name="水浒传"
Console.WriteLine("我是四大名著之一的:" + Name); //输出方式六:由值获取内容
string Name2 = "红楼梦";
int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2)); //此时 j=2
Console.WriteLine("我是《红楼梦》对应的值序号:"+j); Console.ReadKey();
}
enum Man:int //四大名著枚举
{
西游记 = ,
红楼梦 = ,
三国演义 = ,
水浒传 =
}
}
}
2、标志枚举
标志枚举要在顶部加[System.Flags]特性进行声明。而且枚举支持组合运算。
这种位运算是非常有用的,在sql语句里也支持位运算。也就是说,把一个枚举运算后的结果存入数据库之后,还能够按照你的要求读取出来。比如:
将一个"高帅"存如数据库的值存入数据库,那么存入去的就是整型5。
select * from Table where Column & = //Column 是列名 select * from Table1 where Column | = Column
如下demo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace enumApplication
{
class Program
{
static void Main(string[] args)
{
var man = People.高 | People.帅; //赋值为101 计算方法001或上100,结果是101
Console.WriteLine("高和帅的枚举值和为:"+(int)man);
if ((man & People.高) == People.高) //101 man
{ //001 高 逐位相与,
Console.WriteLine("此人:高"); //001 如果结果是高,就可以反推出man包含 高
}
else
{
Console.WriteLine("此人:矮");
}
Console.ReadKey();
} [System.Flags]
public enum People:int
{
高 = , //
富 = , //
帅 = , //
}
}
}
3、枚举使用的一些建议
- 作为参数、返回值、变量等类型可以使枚举,尽量使用枚举(要注意考虑分类的稳定性)
- 大多数情况下都可以使用int类型枚举,下列情况除外。
- 枚举可能被大量频繁的使用,这时为了节约空间可以使用小于int类型的枚举。
- 标志枚举,且标志多于32个。
枚举用好了还是蛮方便的,大家不妨去试试。
C#枚举的简单使用的更多相关文章
- C语言第十讲,枚举类型简单说明
C语言第十讲,枚举类型简单说明 一丶C语言中的枚举类型(ENUM) 在我们实际工作中,或者编写代码中.我们有的时候会用固定的值.而且不是很多. 这个时候就可以使用枚举了.如果我们使用#define显然 ...
- Java Enum 枚举的简单使用
一.什么是枚举 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型必须是一个内置的有符号(或无符号)整数类型(如 ...
- java 枚举的简单应用。
枚举,就是保存着原始的<key,value> 在代码中会经常用到.为了不坑自己,记录一下笔记 package com.fortunedr.common.constant; public e ...
- Java中枚举类型简单学习
/* * enum类型不允许继承 * 除了这一点,我们基本上可以将enum看作一个常规的类 * 我们可以添加自己的方法与属性,我们也可以覆盖其中的方法. * 不过一定要在enum实例序列的最后添加分号 ...
- <java>枚举的简单介绍
1.枚举,enum关键字,相当于public final static. 2.举例: 首先定义了一个名为spiciness的枚举类型. public enum Spiciness { NOT, MIL ...
- java 枚举类(简单使用)
直接上代码 用法一(常量): package com.ou.test; import com.sun.corba.se.impl.util.SUNVMCID; public class Enum { ...
- c#编程基础之枚举
枚举的意义就在于限制变量取值范围. 当可以确定的几种取值时才可以用. 如果输入一个字符串需要进行判断是否是我们需要的字符串时,则一般需要这样写: using System; using System. ...
- 想让你的java代码更漂亮,用枚举吧
枚举是java 5之后添加的一个重要特性,这个特性不能提高性能,但是能让java程序员写出更优雅的代码. 我之前看到过挺多介绍java枚举的不错的帖子,我也来参与以下这个话题. 1. 枚举基本用法 / ...
- JAVA中的枚举小结
枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...
随机推荐
- gitlab-ci-runner安装
前言 什么是CI/CD? CI (Continuous Integration) 持续集成, CD (Continuous Delivery) 持续部署 个人理解 本地开发代码, 提交远程仓库 仓库接 ...
- 如何运行vue项目
首先,列出来我们需要的东西: node.js环境(npm包管理器) vue-cli 脚手架构建工具 cnpm npm的淘宝镜像 安装node.js 从node.js官网下载并安装node,安 ...
- 【STM32H7教程】第8章 STM32H7的终极调试组件Event Recorder
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第8章 STM32H7的终极调试组件Event Re ...
- Hello World 程序的起源与历史
这是一个最著名的程序.对每一位程序员来说,这个程序几乎是每一门编程语言中的第一个示例程序.那么,这个著名的程序究竟从何而来呢? 实际上,这个程序的功能只是告知计算机显示 Hello World 这句话 ...
- MySQL 多实例的安装
Step 1 . 准备工作 关闭防火墙; 安装 MySQL依赖于libaio 库:下载,解压,重命名 MySQL的执行文件:新建用户组和用户 等准备工作在此不再赘述. 可执行文件目录为 /data/m ...
- [ gczdac ] 20190306 访者必阅
1.我的私人博客!!! 2.博主还处于入门学习阶段,并且非常玻璃心 3. 激烈讨论√ 人身攻击× 4. 欢迎指正错误,相互学习 5. 很少在线,无法及时回复请谅解 https://www.cnblo ...
- C#常见金额优选类型及其三种常用的取整方式
这两天一直在做一个商城后台的对账方面的工作,忽然发现C#真的有很多值的学习的东西: 一.C#常用的三种取整方式(主要适用于double.decimal.float这一类型的数据): Math.Roun ...
- django框架使用mysql步骤
在创建好django项目的基础上来讲解使用orm框架 注意:首先在mysql中手动或者通过命令创建一个数据库,我先创建一个名为orm的数据库. 1:在项目文件夹中的settings.py文件中配置my ...
- dropload.js(上拉加载插件使用过程中遇到的坑)
dropload.js相关介绍和使用以及demo下载详见:https://github.com/ximan/dropload (原文出处) 之前因为项目需要一个上拉加载的效果,然后无意中看到了此插件, ...
- Mac电脑上一款非常时尚高清的动态壁纸Living Wallpaper HD
很多朋友Mac电脑上都喜欢用动态壁纸,Living Wallpaper HD是本人尝试的一款非常不错的高清动态壁纸.有时钟.天气等各种组建,非常时尚美观. Living Wallpaper HD下载地 ...