-
2019-06-29 17:28:56
一、声明枚举值、枚举值描述
using System.ComponentModel; public enum status { /// <summary> /// 取消 /// </summary> [Description("取消")] cancel, /// <summary> /// 提交 /// </summary> [Description("提交")] submit, /// <summary> /// 同意 /// </summary> [Description("批准")] pass, /// <summary> /// 驳回 /// </summary> [Description("驳回")] reject }
二、获取枚举值字符串、根据枚举获取枚举值描述
/// <summary> /// 获取枚举描述信息 /// </summary> /// <param name="enumValue"></param> /// <returns></returns> public static string GetEnumDescription(this Enum enumValue) { string str = enumValue.ToString(); System.Reflection.FieldInfo field = enumValue.GetType().GetField(str); object[] objs = field.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute) , false); if (objs == null || objs.Length == 0) return str; System.ComponentModel.DescriptionAttribute da = (System.ComponentModel.DescriptionAttribute)objs[0]; return da.Description; } /* 示例:string statusDes = status.submit.GetEnumDescription(); */ /// <summary> /// 枚举字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="enumValue"></param> /// <returns></returns> public static string GetEnumString<T>(this Enum enumValue) { return Enum.GetName(typeof(T) , enumValue);//推荐 } /* 示例:string status = status.submit.GetEnumString<status>(); */ /// <summary> /// 根据Description获取枚举 /// </summary> /// <typeparam name="T">枚举类型</typeparam> /// <param name="description">枚举描述</param> /// <returns>枚举</returns> public static string GetEnumName<T>(string description) { Type _type = typeof(T); foreach (FieldInfo field in _type.GetFields()) { DescriptionAttribute[] _curDesc = field.GetDescriptAttr(); if (_curDesc != null && _curDesc.Length > 0) { if (_curDesc[0].Description == description) return field.GetValue(null).ToString(); } } return null; } /* 示例:string status = GetEnumName<status>("提交"); */
三、根据枚举值变量获取枚举描述信息
status statusEnum; //方式1 Enum.TryParse<status>(strStatus, out statusEnum); //方式2 statusEnum = (status)Enum.Parse(typeof(status), strStatus); string strStatusDes = statusEnum.GetEnumDescription();
更多相关内容 -
【⭐C/C++の深入浅出⭐】int数与多枚举值互转
2021-08-24 14:28:24int数与多枚举值互转 在C/C++在C/C++的开发中经常会遇到各种数据类型互转的情况,正常的互转有:单个枚举转int数,int数转float数,float数转double数等。但是我们有时也会遇到多个枚举值与数字互转的情形(例如多个...int数与多枚举值互转
在C/C++在C/C++的开发中经常会遇到各种数据类型互转的情况,正常的互转有:单个枚举转int数,int数转float数,float数转double数等。但是我们有时也会遇到多个枚举值与数字互转的情形(例如多个算法类型枚举开启标志转成数字,这个数字来表示多个标志位,按位来表示)。这样一个数字就能表示很多个标志位了,针对内存较少的嵌入式设备,这么操作可以达到节约内存消耗,提高程序运行效率的目的。
Demo示例
demo核心知识点:通过位运算符(布尔位运算符:"~"、"&"、"|";移位运算符:"<<")实现int数与多枚举值互转。
Code:#include <iostream> using namespace std; int nFlag = 0; //用移位表示各个枚举的开关 typedef enum { TYPEA, //A开启,则nflag为1=0x00000001 TYPEB, //B开启,则nflag为2=0x00000010 TYPEC, //C开启,则nflag为4=0x00000100 TYPED, //D开启,则nflag为8=0x00001000 TYPENUM //枚举最大值,计数用 }EMTypeNum; void int2enum (int n) { if(n&(0x01<<TYPEA)) { //为真 cout << "TYPEA is ON\n"; } else { //为假 cout << "TYPEA is OFF\n"; } if(n&(0x01<<TYPEB)) { //为真 cout << "TYPEB is ON\n"; } else { //为假 cout << "TYPEB is OFF\n"; } if(n&(0x01<<TYPEC)) { //为真 cout << "TYPEC is ON\n"; } else { //为假 cout << "TYPEC is OFF\n"; } if(n&(0x01<<TYPED)) { //为真 cout << "TYPED is ON\n"; } else { //为假 cout << "TYPED is OFF\n"; } } void enum2int(EMTypeNum eMType, bool bOn) { if(bOn) { nFlag |= (0x01 << eMType); } else { nFlag &= ~(0x01 << eMType); } cout << "nFlag:" << nFlag << endl; } int main() { int i = 0; for(i = 0; i < TYPENUM;i++) { enum2int((EMTypeNum)i, true); int2enum(nFlag); cout << endl; } for(i = 0; i < TYPENUM;i++) { enum2int((EMTypeNum)i, false); int2enum(nFlag); cout << endl; } return 0; }
Result:
nFlag:1 TYPEA is ON TYPEB is OFF TYPEC is OFF TYPED is OFF nFlag:3 TYPEA is ON TYPEB is ON TYPEC is OFF TYPED is OFF nFlag:7 TYPEA is ON TYPEB is ON TYPEC is ON TYPED is OFF nFlag:15 TYPEA is ON TYPEB is ON TYPEC is ON TYPED is ON nFlag:14 TYPEA is OFF TYPEB is ON TYPEC is ON TYPED is ON nFlag:12 TYPEA is OFF TYPEB is OFF TYPEC is ON TYPED is ON nFlag:8 TYPEA is OFF TYPEB is OFF TYPEC is OFF TYPED is ON nFlag:0 TYPEA is OFF TYPEB is OFF TYPEC is OFF TYPED is OFF
结束寄语
有关int数与多枚举值互转的介绍就到此结束啦!下篇博文与各位再见面~
写博不易,如蒙厚爱,赏个关注,一键三连~~点赞+评论+收藏🤞🤞🤞,感谢您的支持~~
-
java枚举结果类、根据状态值获取枚举值
2018-12-10 22:07:57java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list> -
C# 获取枚举值的简单实例
2020-09-04 23:59:28介绍了C# 获取枚举值的简单实例,有需要的朋友可以参考一下 -
c#枚举值增加特性说明(推荐)
2020-08-30 13:43:49主要介绍了c#枚举值增加特性说明(推荐),需要的朋友可以参考下 -
如何将枚举值保存到数据库?
2021-07-17 00:16:41For example:namespace PizzaSoftware.Data{public class User{public string Username { get; set; }public string Password { get; set; }public Permission PermissionType { get; set; }}public enum Permission...For example:
namespace PizzaSoftware.Data
{
public class User
{
public string Username { get; set; }
public string Password { get; set; }
public Permission PermissionType { get; set; }
}
public enum Permission
{
Basic,
Administrator
}
}
If if I were to use Entity-Framework's CodeFirst, how can I save this value?
This is for a Windows Forms, Desktop application.
Thank you!
解决方案
You can retrieve the int value (or whatever type you have your enum set to) via a simple cast and save that to the DB.
And to read it back out, you'd cast from int back to enum:
Permission enumValue = (Permission)intValue;
-
伪枚举:创建、操作和显示具有枚举值的数组-matlab开发
2021-06-01 04:08:51枚举是用作数据值的标识符列表。 例如,美国州 MA、NY 等的列表构成一个枚举。 另一个具有一个值的枚举是“NoData”枚举。 伪枚举是一种纯粹在 MATLAB m 代码中实现枚举形式的方法。 提交的文件包括 2 个文件 penum.... -
枚举值的组合使用
2016-12-08 15:20:59有时候枚举只返回一项会显得不够用,比如新建一个枚举类型week它总共有7项分别代表周日到周一,声明一个week类型的枚举值work用来表示一个人的值日安排,这个人的值日安排可能不止一天,如果work的值只能为week7个...
有时候枚举只返回一项会显得不够用,比如新建一个枚举类型week它总共有7项分别代表周日到周一,声明一个week类型的枚举值work用来表示一个人的值日安排,这个人的值日安排可能不止一天,如果work的值只能为week7个枚举项中的一个显然是不够用的。这时候就需要用到枚举的组合。
|和||,&和&&的区别
想要使用枚举的组合就需要知道|和||。&和&&之间的关系
“|”和“||”
“|”和“||”都可以表示逻辑或运算,不同的是做逻辑或运算时”|”会检查每一个条件再进入下一步,而”||”则相反,它会从左往右直到遇到条件为真就立即进入下一步。
“&”和“&&”
“&”和“&&”都可以表示逻辑与运算,不同的是做逻辑与运算时”&&”会检查每一个条件再进入下一步,而”&&”则相反,它会从左往右直到遇到条件为假就跳出然后进入下一步不再检验剩余条件是否成立。这也是”&&“的短路功能。
ps: “&”和”|”与”&&”和”||”相比还多了位运算的功能,当&的两边不是布尔类型时&表示按位与运算;当”|“的两边不是布尔类型时”|“表示按位或运算。**
//test.h #include<stdio.h> #include<string.h> typedef enum WEEK { Monday = 1, Tuesday = 2, Wednesday = 4, Thursday = 8, Friday = 16, Saturday = 32, Sunday=64 }Week; void printWeek(Week src) { char dst[MAXSIZE] = { 0 }; if ((src&Monday) == Monday) strcat(dst, "Monday "); if ((src&Tuesday) == Tuesday) strcat(dst, "Tuesday "); if ((src&Wednesday) == Wednesday) strcat(dst, "Thursday "); if ((src&Thursday) == Thursday) strcat(dst, "Monday "); if ((src&Friday) == Friday) strcat(dst, "Friday "); if ((src&Saturday) == Saturday) strcat(dst, "Saturday "); if ((src&Sunday) == Sunday) strcat(dst, "Sunday "); printf("%s", dst); };
int main() { Week work = Monday | Thursday | Saturday; printWeek(work); getchar(); return 0; }
运行结果如下:
这种组合使用是基于二进制和位运算的原理,在定义枚举Week时 每个枚举项的值都为2的次方,转化为二进制就会出出现只有1位为1其他位都为0的情况。这样在两个值为 2的不同次幂的或运算后他们各自的标志位就会整合到一块。再与其它枚举值做按位与就可以知道是否含有此枚举值。
-
C# 从枚举值获取对应的文本描述详解
2020-08-31 14:24:42主要介绍了C# 从枚举值获取对应的文本描述详解的相关资料,需要的朋友可以参考下 -
C#根据枚举值获取枚举
2022-01-10 17:44:58C#根据枚举值获取枚举 获取枚举值方法 //枚举值 enum1{ 测试1=123, 测试2=312, 测试3=431 } //根据值获取枚举方法 public static Enum GetEnumByValue(Type enumType, string value) { ... -
java枚举,获取枚举值
2021-03-17 14:02:25创建枚举 public enum RefundTypeEnum { /** * 值类型 */ ONLY_REFUND("1", "仅退款"), REFUNDS("2", "退货退款"); /** * 数据库存放编码 */ private String code;... * 根据code返回枚举值 -
python3中确保枚举值代码分析
2021-01-21 15:20:08今天我们主要教大家用代码来在python3中确保枚举值,具体的操作方法我们继续往下看。 创建 枚举语法与 class 语法相同,枚举的定义可以通过继承 Enum 的方式来实现, 看一下示例: from enum import Enum class ... -
枚举类型、枚举名称、枚举值
2018-08-23 23:29:50先看一个枚举类: from enum import Enum class Color(Enum): YELLOW = 1 GREEN = 2 ...print(Color.GREEN.value) # 枚举值 取值 Color.GREEN.value print(Color.GREEN.name) # 枚举名称 print(Co... -
EnumSelection:Unity编辑器扩展以选择枚举类和值
2021-05-16 19:31:05枚举选择EnumSelection显示可以选择枚举类和值的弹出窗口。 如果需要,请按 :star: :star: :star:为什么? 只需声明简单的枚举字段,即可轻松使用Unity的默认枚举弹出窗口。 public class SampleBehaviour : ... -
枚举值
2018-06-17 20:16:35从学习C#接触到的枚举值,一直不太明白这到底是个什么东西。这不在.NET中又看到了它,接下来来总结一下。【概述】从字面理解枚举的意思是一一列出。在计算机语言中,枚举就相当于把变量的值一一列出,这变量只能是... -
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名
2018-10-09 15:08:57java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目 -
具有多个值类型的Java枚举
2021-07-16 22:28:32Basically what I've done is write an enum for States, and I want to not only be able to access them just as states but also access their abbreviation and whether or not they were an original colony.pu... -
Mybatis xml中引用枚举值
2021-06-02 23:00:42xml中引用枚举值 ${@com.demo.Sex@MAN.value} ${@枚举类全类名@枚举实例.属性名} 例: package com.demo.Sex; import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public ... -
反射修改枚举值
2019-10-29 19:12:34首先说下业务场景,之前做的微信公众模板... 其实不提倡修改枚举中的值, 我为什么要改这个呢……主要是因为懒,如果一个个从apollo里面获取的话,涉及改动的地方较多,不太好维护,就这样改啦。 有疑问还请评论区留言~ -
Java根据枚举索引值来获取枚举值
2021-08-17 13:24:50Java根据枚举索引值来获取枚举值 枚举类.class.getEnumConstants()[枚举索引] 例如: BorderStyle.class.getEnumConstants()[Integer.valueOf(borderStyle)]; -
获取枚举值的属性
2021-03-04 10:01:26我想知道是否可以获取枚举值而不是枚举本身的属性? 例如,假设我有以下枚举:using System.ComponentModel; // for DescriptionAttributeenum FunkyAttributesEnum{[Description("Name With Spaces1")]... -
Java 遍历枚举值
2020-09-19 09:18:46Java 遍历枚举值 枚举是Java中数据类型,用于将一组预定义常量赋给变量。本文介绍几种方式遍历枚举值。 1. 定义枚举 首先我们定义枚举,简单示例如下: public enum DaysOfWeekEnum { SUNDAY, MONDAY, TUESDAY, ... -
swagger展示属性枚举值
2019-11-15 16:07:09通过为@ApiModelProperty注解属性allowableValues设置值,在swagger上展示该属性接受的入参枚举值。 示例如下: @ApiModelProperty(value = "性别", allowableValues = "male, female") private String... -
vue对枚举值转换
2020-09-29 11:47:24最近再做项目中碰到了这样一个问题,前端vue对后端返回数据中的枚举值做处理。之前枚举值的转换都在后端返回dto中做处理,首次碰到这种问题,先将解决方案抛出,希望能帮到有缘人: <el-table v-loading="loading... -
C#小技巧 获取枚举所有枚举值
2021-12-01 20:08:14enum TestEnume { Enum1, Enum2 } static void Test() { Debug.Log("GetValues"); foreach(TestEnume e in Enum.GetValues... } } Enum.GetUnderlyingType 可以获得枚举约束的类型 比如 enum TestEnum:long 就返回long -
动态增加枚举值
2020-05-12 10:17:44之前做东西遇到了这么一个需求,希望动态的增加枚举类中的枚举值。我们正常情况下都是先定义枚举类,然后写好静态的枚举值,然后在代码中使用,那可不可以动态的增加枚举呢?研究后通过反射是可以实现的。... -
Java –比较枚举值
2020-06-04 12:15:37在Java中,可以使用==运算符比较Enum值。 1. Java枚举示例 语言.java package com.mkyong.java public enum Language { JAVA, ... 2.... 将枚举值与==运算符进行比较的示例。 Test.java pa...