枚举Enum的用法

一、前言

对于枚举Enum,大家都非常熟悉,但枚举出现的场景非常多的时候,是不是可以抽象出一个通用的解决方式。代码大家都会写,但并不是所有人都喜欢写重复的代码,老是用Ctrl+C和Ctrl+V累不累啊?很多人和我一样,非常不喜欢写重复的代码,代码写多了,BUG就多。对于常见的场景,大部分人都喜欢抽象出来,写一套通用的,每个地方都可以用,而且不易出错。当然,你喜欢Ctrl+C和Ctrl+V,本人也没有办法....

二、int值,string值转换成Enum

如下,一个简单枚举:

public enum ExchangeType
    {
        [EnumFieldAttribute("不限", true)]
        All = 0,
        [EnumFieldAttribute("深圳证券交易所")]
        SZSE = 1
    }

对于以下输入代码:

ExchangeType type = (ExchangeType)3;

            if (type == ExchangeType.All)
            {
                Console.WriteLine("ExchangeType.All.");
            }
            else if (type == ExchangeType.SZSE)
            {
                Console.WriteLine("ExchangeType.SZSE.");
            }
            else
            {
                Console.WriteLine("Non Exist!");
            }

对于强制转换,大家猜猜看,会输出什么....

对于结果,大家可以自己去测试下,有可能与你期望的值不一致!

同样对于以下代码:

ExchangeType type;

bool success = Enum.TryParse<ExchangeType>("3", out  type);

TryParse执行的返回结果success也是成功的(为true),但期望值也不一定正确。

因此,对于枚举转换来说,还是很容易出错的。所以,必须提供默认的值来确保转换失败时,返回正确的值。对于int值和string值转换成Enum的代码如下:

public static T ToEnum<T>(int value, T defaultT) where T : struct
        {
            string enumName = Enum.GetName(typeof(T), value);

            return ToEnum<T>(enumName, defaultT);
        }

        public static T ToEnum<T>(string enumName, T defaultT) where T : struct
        {
            if (string.IsNullOrWhiteSpace(enumName))
            {
                return defaultT;
            }

            T result;

            if (!Enum.TryParse<T>(enumName.Trim(), out result))
            {
                return defaultT;
            }

            if (Enum.IsDefined(typeof(T), result))
            {
                return result;
            }

            return defaultT;
        }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, return
, enum
, 代码
, result
, 枚举用法
, ios枚举的用法
IsDefined
enum枚举类型的用法、枚举类型enum用法、java枚举类型enum用法、c 枚举类型enum用法、php枚举类型enum用法,以便于您获取更多的相关知识。

时间: 2024-09-15 11:14:50

枚举Enum的用法的相关文章

Java 1.5新特性Enum的用法

Enum是enumeration(列举)的简写形式,包含在java.lang包中.熟悉C,C++,C#,或Pascal人应该对列举有所了解,先看个例子: public enum Season { winter, spring, summer, fall } 一个enum是定义一组值的对象,它可以包括零个或多个值成员.它是属于enum类型的,一个enum对象中不可有两个或多个相同的属性或值.在次之前的java程序员一般是用接口的方法实现列举的,如: public interface Season

java中enum的用法_java

本文实例讲述了java中enum的用法.分享给大家供大家参考.具体分析如下: 1. 基本用法 复制代码 代码如下: enum Day {     SUNDAY, MONDAY, TUESDAY, WENDSDAY, THURSDAY, FRIDAY, SATURDAY; } 枚举是常量,所以应该用大写. 2. 枚举是对象 枚举隐含地继承了java.lang.Enum,所以它具有java.lang.Enum的属性和方法.遍历枚举: 复制代码 代码如下: public class Main {   

深入谈谈java的枚举(enum)类型_java

前言 在大家日常编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集".在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场 枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值. 枚举(enum)实

结构体struct、枚举enum、联合体union、位字段、自定义类型typedef、字节对齐

结构体struct 1 结构体的基本知识 2 结构体与函数 3 结构体数组 4 自引用结构体 枚举变量enum 联合体union 位字段 1 一般的方法定义屏蔽吗 2 用位字段来定义屏蔽吗 自定义类型typedef 字节对齐 pragma pachx 按x个字节对齐 1.结构体struct 1.1 结构体的基本知识 #include <stdio.h> struct point{ int x; int y; }p1, p2, p3; struct point pt; struct point

java中的枚举enum,如何实现

问题描述 java中的枚举enum,如何实现 这两天在想java中的枚举,不是很明白,java中的枚举除自身的枚举成员外,还可以实现接口,可以有构造函数及可以定义方法. c#中的枚举简简单单的值类型,而java中的枚举是引用类型. 在c#项目中,经常用枚举, public enum FileType { Unknow=0 Word=1 Excel=2 } public T NumToEnum(int number) { try { if (Enum.IsDefined(typeof(T) num

C++基础教程(三)——枚举enum

//============================================================================ // Name : Enum.cpp // Author : lf // Version :<C++语言基础教程> 吕凤翥 P33--P35 // Copyright : Your copyright notice // Description : 枚举enum基础知识 //================================

Java枚举(enum) 详解7种常见的用法_java

JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便.  用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch JDK1.6之前的switch语句只支持int

详解Swift中enum枚举类型的用法_Swift

一.引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法 Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 case 王 case 李 case 赵 } //创建一个枚举类型的

Jsdk5.0中新增枚举enum类型使用例解

js 作者:Junsan Jin 日期:2005-03-25 邮箱:junsan21@126.com ; junnef21@sohu.com Jsdk5.0中新增了很多的特性,如泛型.增强的循环.改进的装.拆箱.静态引入等,大大增强了java语言的易用性. 我现在正在做一个从com+(dcom)平台到j2ee平台移植的项目,中间有很多枚举类型的定义,以前做起来要引入第三方类库,或者自己写类库,或者干脆定义成静态变量使用,很不方便,而且可能会产生很多问题.Jsdk5.0的发布正好解决了这些问题.