枚举类型是定义了一组“符号名称/值”配对。枚举类型是强类型的。每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system.Object派生,所以枚举类型是指类型。

编译枚举类型时,C#编译器会把每个符号转换成类型的一个常量字段。C#编译器将枚举类型视为基元类型。

1.获取枚举列表:

        /// <summary>
/// 获取枚举列表
/// </summary>
/// <param name="enumType">枚举的类型</param>
/// <returns>枚举列表</returns>
public static Dictionary<int, string> GetEnumList(Type enumType)
{
var dic = new Dictionary<int, string>();
try
{
var fd = enumType.GetFields();
for (var index = ; index < fd.Length; ++index)
{
var info = fd[index];
var fieldValue = System.Enum.Parse(enumType, fd[index].Name);
var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false);
foreach (EnumTextAttribute attr in attrs)
{
var key = (int)fieldValue;
if (key == -) continue;
var value = attr.Text;
dic.Add(key, value);
}
}
return dic;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

2.获取枚举名称:

        /// <summary>
/// 获取枚举名称
/// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="id">枚举值</param>
/// <returns>如果枚举值存在,返回对应的枚举名称,否则,返回空字符</returns>
public static string GetEnumTextById(Type enumType, int id)
{
var ret = string.Empty;
try
{
var dic = GetEnumList(enumType);
foreach (var item in dic)
{
if (item.Key != id) continue;
ret = item.Value;
break;
}
return ret;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

3.根据枚举值获取对应中文描述:

        /// <summary>
/// 根据枚举值获取对应中文描述
/// </summary>
/// <param name="enumValue">枚举值</param>
/// <returns>枚举值中文描述</returns>
public static string GetEnumTextByEnum(object enumValue)
{
var ret = string.Empty;
if ((int)enumValue == -) return ret;
try
{
var dic = GetEnumList(enumValue.GetType());
foreach (var item in dic)
{
if (item.Key != (int)enumValue) continue;
ret = item.Value;
break;
}
return ret;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

4.获取枚举名称:

        /// <summary>
/// 获取枚举名称
/// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="index">枚举值的位置编号</param>
/// <returns>如果枚举值存在,返回对应的枚举名称,否则,返回空字符</returns>
public static string GetEnumTextByIndex(Type enumType, int index)
{
var ret = string.Empty;
var dic = GetEnumList(enumType);
if (index < || index > dic.Count)
return ret;
var i = ;
foreach (var item in dic)
{
if (i == index)
{
ret = item.Value;
break;
}
i++;
} return ret;
}

5.获取枚举值:

        /// <summary>
/// 获取枚举值
/// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="name">枚举名称</param>
/// <returns>如果枚举名称存在,返回对应的枚举值,否则,返回-1</returns>
public static int GetEnumIdByName(Type enumType, string name)
{
var ret = -;
if (string.IsNullOrEmpty(name))
return ret;
var dic = GetEnumList(enumType);
foreach (var item in dic)
{
if (string.Compare(item.Value, name, StringComparison.Ordinal) != ) continue;
ret = item.Key;
break;
}
return ret;
}

6.获取名字对应枚举值:

        /// <summary>
/// 获取名字对应枚举值
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="name">枚举名称</param>
/// <returns></returns>
public static T GetEnumIdByName<T>(string name) where T : new()
{
var type = typeof(T); var enumItem = (T)TypeDescriptor.GetConverter(type).ConvertFrom("-1");
if (string.IsNullOrEmpty(name))
return enumItem; try
{
var fd = typeof(T).GetFields();
for (var index = ; index < fd.Length; ++index)
{
var info = fd[index];
var fieldValue = System.Enum.Parse(type, fd[index].Name);
var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false);
if (attrs.Length != ) continue;
var attr = (EnumTextAttribute)attrs[];
if (!name.Equals(attr.Text)) continue;
enumItem = (T)fieldValue;
break;
}
return enumItem;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

7.获取枚举值所在的位置编号:

        /// <summary>
/// 获取枚举值所在的位置编号
/// </summary>
/// <param name="enumType">枚举的类型</param>
/// <param name="name">枚举名称</param>
/// <returns>如果枚举名称存在,返回对应的枚举值的位置编号,否则,返回-1</returns>
public static int GetEnumIndexByName(Type enumType, string name)
{
var ret = -; if (string.IsNullOrEmpty(name))
return ret; var dic = GetEnumList(enumType);
var i = ;
foreach (var item in dic)
{
if (string.Compare(item.Value, name, StringComparison.Ordinal) == )
{
ret = i;
break;
}
i++;
} return ret;
}

C#枚举类型的常用操作总结的更多相关文章

  1. 自定义枚举类型的常用操作-附源码(xjl456852原创)

    自定义枚举类型中,假如我们有name和desc这样的属性,并在这个基础上定义了多个对象. 那么就可能用到通过name获取desc,或者通过desc获取name.通过name或者desc获取对应的枚举对 ...

  2. Python元组类型、字典类型及常用操作

    一.元组类型 1.用途 记录多个值,当多个值没有改的需求,此时用元组更合适,Python的元组与列表类似,不同之处在于元组的元素不能修改. 2.定义方式 在()内用逗号分隔开多个任意类型的值 t=(1 ...

  3. Python列表类型及常用操作

    Python列表类型 1.用途: 存放多个值,可以根据索引存取值 2.定义方式: 在[ ]内用逗号分割开多个任意类型的值 l=['yven','law','lyf'] #l=list(['yven', ...

  4. C#基础(六)--枚举的一些常用操作

    本章将介绍以下几点: 1.如何把其它类型转换为枚举类型? 2.如何把枚举中的值添加到下拉菜单中? 一.如何把其它类型转换为枚举类型?        我们回顾一下有关字符串与数字之间的转换,如:     ...

  5. JavaScript类型相关常用操作

    JS数组,字符串,json互相转换 JS数组转字符串 使用数组自带的join方法可以把数组转化为字符串: let arr = [1,2,'uu']; let str = arr.join(','); ...

  6. mysql8.0 新特性,对json类型的常用操作

    mysql8 新特性-json数据类型操作 -- 根据key(可多个)获取value SELECT JSON_EXTRACT('{"id": 14, "name" ...

  7. JAVA-集合类型Set常用操作例子(基础必备)

    package com.net.xinfang.reflect; import java.util.Comparator; import java.util.HashSet; import java. ...

  8. Redis string类型常用操作

      Redis 有 string.list.set.zset.hash数据类型.string类型是最基础的,其他类型都是在string类型上去建立的,所以了解熟悉string类型的常用操作对于学习re ...

  9. 【转】掌握java枚举类型(enum type)

    原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...

随机推荐

  1. .net网站常见问题及解决方案

    1.   解决方法: 三个文件放到项目Bin文件夹     2. 解决方法 : requestValidationMode="2.0" 加到 3. 你在浏览器输入网址报这样的错误 ...

  2. oracle 全文检索创建脚本示例

    --创建全文索引 grant execute on ctx_ddl to username;--使用其他帐号对username授权exec ctx_ddl.create_preference('my_ ...

  3. [CSS]textarea设置下划线格式

    功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线  2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...

  4. 【图文教程】Eclipse for PHP+XAMPP调试配置

    一.下载安装XAMPP 下载地址:https://www.apachefriends.org/download.html, 一路“Next”,安装完毕. 二.下载Eclipse for PHP 下载地 ...

  5. NodeJs 开发微信公众号(一)准备工作

    前言 大概是一个月前,自己用业余时间做了一个微信公众号.微信开发,尤其是对后台不熟悉的人来说显得尤其困难.首先要克服的是后台语言(nodejs)的一些不熟悉困难,其次,也是最大的一点困难是在跟微信交互 ...

  6. 仿花田:相亲网站 意中人 已在GitHub上开源

    在园友的强烈呼唤下,我还是负责任的分享给大家,因为对代码比较熟悉一下,还是有些问题要说明,不然别人看起来会比较费劲.说实话除了这个bootstrap的界面风格和这件事情本身对大家有吸引力之外,内部的逻 ...

  7. 探索C#之布隆过滤器(Bloom filter)

    阅读目录: 背景介绍 算法原理 误判率 BF改进 总结 背景介绍 Bloom filter(后面简称BF)是Bloom在1970年提出的二进制向量数据结构.通俗来说就是在大数据集合下高效判断某个成员是 ...

  8. SQL Server 使用全文索引进行页面搜索

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/全文索引 概述 全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询.全文索引将有关重要的词及其位置的信息存储 ...

  9. iOS block种类和切换

    block 分为三种 NSGlobalBlock,NSStackBlock, NSMallocBlock. NSGlobalBlock:类似函数,位于text段: NSStackBlock:位于栈内存 ...

  10. 提供程序不支持 DatabaseExists

    如果Oracle CodeFirst模式下要用EFProviderWrapperToolkit,那么会报告以下错误: 提供程序不支持 DatabaseExists. 这个错误是因为Oracle Cod ...