示例枚举:

    public enum Color
{
[Description("红色")]
Red, [Description("绿色")]
Green = 7, [Description("蓝色")]
Blue
}
Enum转Int
int red = (int)Color.Red;//0
int green = (int)Color.Green;//7
int blue = (int)Color.Blue;//8
  • 枚举类型默认为Int
  • 枚举值默认从0开始,并依次递增
Int转Enum
 Color a = (Color)5;//不报错
Color b = (Color)7; Console.WriteLine(a.ToString());//5
Console.WriteLine(b.ToString());//Green
  • Int 可以直接转 Enum
  • 枚举可能会得到非预期的值(值没有对应的成员),不会报错
Enum转String
var red = Color.Red.ToString();//Red
var green = Color.Green.ToString();//Green
var blue = Color.Blue.ToString();//Blue
String转Enum
var green = Enum.Parse(typeof(Color), "Green");//Color.Green
var black = Enum.Parse(typeof(Color), "Black");//throw ArgumentException
Enum.TryParse<Color>("Black", out var blackTry);//Color.Red
  • 和枚举名相同的字符可以转成相对应的枚举(区分大小写)
  • 转化不存在的字符,会抛出异常(不同于Int)
  • 使用Enum.TryParse转换,不存在,则返回默认枚举
  • 枚举的默认值 0,即使没有为0的成员
读取Description

当我需要展示枚举 Int 和 枚举名以外的信息时,可以使用 DescriptionAttribute 属性,设置描述信息然后读取

    /// <summary>
/// 获取枚举的描述
/// </summary>
/// <param name="enum">枚举值</param>
/// <returns>description</returns>
public static string ToDescription(this Enum @enum)
{
MemberInfo[] member = @enum.GetType().GetMember(@enum.ToString());
if (member.Length != 0)
{
string description = GetDescription(member[0]);
if (description != null)
{
return description;
}
}
return @enum.ToString();
} /// <summary>
/// 获取成员信息的 Description
/// </summary>
/// <param name="memberInfo">成员信息</param>
/// <returns>Description</returns>
private static string GetDescription(MemberInfo memberInfo)
{
var type = typeof(DescriptionAttribute);
var attribute = memberInfo.GetCustomAttribute(type) as DescriptionAttribute;
return attribute?.Description;
}
var red = Color.Red.ToDescription();//红色
var green = Color.Green.ToDescription();//绿色
var blue = Color.Blue.ToDescription();//蓝色
枚举的扩展方法

示例代码:https://gitee.com/sayook/Extensions/blob/master/Extensions/EnumExtensions.cs

相关好文:https://mp.weixin.qq.com/s/f9Wc3kIKF4K1zHkHuHyp3w

枚举:Enum-Int-String之间的转换与扩展的更多相关文章

  1. C# Enum,Int,String的互相转换 [转]

    C# Enum,Int,String的互相转换 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名 ...

  2. C# Enum,Int,String的互相转换

    版权声明:本文为博主原创文章,未经博主允许不得转载. Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已 ...

  3. Enum,Int,String的互相转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基类 ...

  4. (转)C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  5. C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  6. 【转】C# Enum,Int,String的互相转换 枚举转换

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  7. (转)C# Enum,Int,String的互相转换 枚举转换--非常实用

    Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...

  8. C# Enum,Int,String,之间及bool与int之间的转换

    枚举类型的基类型是除 Char 外的任何整型,所以枚举类型的值是整型值. Enum 提供一些实用的静态方法: (1)比较枚举类的实例的方法 (2)将实例的值转换为其字符串表示形式的方法 (3)将数字的 ...

  9. C++ char float int string 之间的转换

    string str = "123"; string 转 int int i = atoi( str.c_str() ); string 转 float float f = ato ...

  10. C++string,char* 字符数组,int类型之间的转换

    string.int 常见类型之间相互转换 int & string 之间的转换 C++中更多的是使用流对象来实现类型转换 针对流对象 sstream实现 int,float 类型都可以实现 ...

随机推荐

  1. c++四舍五入函数round()

    其实c++自身是没有四舍五入函数round()的,若果你要用到的话,可以自己写一个round(),不过要用到floor()和ceil这两个函数如下: #include<iostream> ...

  2. Linux open() 一个函数,两个函数原型

    open在手册中有两个函数原型, 如下所示: int open(const char *pathname, int flags); int open(const char *pathname, int ...

  3. Debugging Under Unix: gdb Tutorial (https://www.cs.cmu.edu/~gilpin/tutorial/)

    //注释掉 #include <iostream.h> //替换为 #include <iostream> using namespace std; Contents Intr ...

  4. 设置共享内存大小 【windows】

    hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // use paging file NULL, // default security PAG ...

  5. 构造最短程序打印自身的 MD5

    一,介绍 比赛题目很简单:构造一个程序,在 stdout 上打印出自身的 MD5,程序越短越好.按最终程序文件大小字节数排名,文件越小,排名越靠前. 只能使用 ld-linux-x86-64.so, ...

  6. Ubuntu登陆时忘记密码怎么办

    有时候由于各种原因,用户会忘记自己登陆Ubuntu的登陆密码,这个时候我们能怎么办呢? 第一步:先重启电脑,开机时长按shift键,进入grub菜单: 第二步:按“e”键编辑启动项,显示如下图,将下图 ...

  7. 使用@vue/cli搭建vue项目开发环境

    当前系统版本 mac OS 10.14.2 1.安装node.js开发环境 前端开发框架和环境都是需要 Node.js  vue的运行是要依赖于node的npm的管理工具来实现 <mac OS ...

  8. 在okhttp的callback回调中加Toast出现Cant create handler inside hread that has not called Looper.prepare()...

    2019独角兽企业重金招聘Python工程师标准>>> 分析:callback中回调的response方法中还是在子线程中运行的,所以要调取Toast必须回到主线程中更新ui 解决方 ...

  9. Gartner:2016 Q2全球服务器市场,中国再度成为亮点

    对于IT产品供应商来说,Gartner.IDC等第三方分析机构市场调研报告无疑是一次"中考",成绩优异的论功行赏,迎接鲜花和掌声:差强人意,批斗会将是不可避免的,接下来加班加点,力 ...

  10. Java实现zip文件解压[到指定目录]

    2019独角兽企业重金招聘Python工程师标准>>> package com.ljheee.ziptool.core; import java.io.File; import ja ...