首页 > 编程语言 >c#枚举enum用法

c#枚举enum用法

时间:2022-10-25 11:45:33浏览次数:59  
标签:Enum c# enum Test 枚举 typeof var public

转载:https://www.cnblogs.com/eliauk-L/p/16185682.html

1.定义枚举类型

 public enum Test
 {
   男 = 0,
   女 = 1
 }

public enum Test {   男,   女 }

2.获取枚举值ublic void EnumsAction()

public void EnumsAction()
{
    var s = Test.男;//男
    var s2 = (int)Test.男;//0

    var a = Test.男.ToString();//"男"

    var r = (Test)1;//女

    var x = (Test)Enum.Parse(typeof(Test), "男");//男
    var x2 = Enum.Parse(typeof(Test), "男");//男
    var x3 = Enum.GetName(typeof(Test), 0);//"男"

    foreach (var item in Enum.GetValues(typeof(Test)))
    {
        var v = item;//男[女]
        var v2 = (int)item;//0[1]
        var t = item.GetType();//{Name = "Test" FullName = "BaseControl.Enum.Test"}
        var g = item.ToString();//"男"["女"]
    }
}

3.Enum Helper的使用

public static class EnumHelper
{
    /// <summary>
    /// 根据枚举的值获取枚举名称
    /// </summary>
    /// <typeparam name="T">枚举类型</typeparam>
    /// <param name="status">枚举的值</param>
    /// <returns></returns>
    public static string GetEnumName<T>(this int status)
    {
        return Enum.GetName(typeof(T), status);
    }
    /// <summary>
    /// 获取枚举名称集合
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static string[] GetNamesArr<T>()
    {
        return Enum.GetNames(typeof(T));
    }
    /// <summary>
    /// 将枚举转换成字典集合
    /// </summary>
    /// <typeparam name="T">枚举类型</typeparam>
    /// <returns></returns>
    public static Dictionary<string, int> getEnumDic<T>()
    {

        Dictionary<string, int> resultList = new Dictionary<string, int>();
        Type type = typeof(T);
        var strList = GetNamesArr<T>().ToList();
        foreach (string key in strList)
        {
            string val = Enum.Format(type, Enum.Parse(type, key), "d");
            resultList.Add(key, int.Parse(val));
        }
        return resultList;
    }
    /// <summary>
    /// 将枚举转换成字典
    /// </summary>
    /// <typeparam name="TEnum"></typeparam>
    /// <returns></returns>
    public static Dictionary<string, int> GetDic<TEnum>()
    {
        Dictionary<string, int> dic = new Dictionary<string, int>();
        Type t = typeof(TEnum);
        var arr = Enum.GetValues(t);
        foreach (var item in arr)
        {
            dic.Add(item.ToString(), (int)item);
        }

        return dic;
    }

    ///获取description信息
    public static string GetDescription(Enum value)
    {
        if (value == null)
        {
            throw new ArgumentException("value");
        }
        string description = value.ToString();
        var fieldInfo = value.GetType().GetField(description);
        var attributes =
            (EnumDescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(EnumDescriptionAttribute), false);
        if (attributes != null && attributes.Length > 0)
        {
            description = attributes[0].Description;
        }
        return description;
    }

    public static string GetEnumDescription2(Enum enumValue)
    {
        var field = enumValue.GetType().GetField(enumValue.ToString());
        var objs = field.GetCustomAttribute(typeof(DescriptionAttribute));
        var descriptionAttribute = (DescriptionAttribute)objs;
        return descriptionAttribute.Description;
    }

}

 

标签:Enum,c#,enum,Test,枚举,typeof,var,public
From: https://www.cnblogs.com/fangxinliu/p/16824332.html

相关文章

  • CF1523F Favorite Game
    CF1523FFavoriteGame给定\(n\)个传送门和\(m\)个地点。传送门需要提前前往才能打开,你可以不用任何时间传送到任何一个传送门,你可以步行\(1\)个单位\(1\)秒。每......
  • CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
    CF741DArpa’sletter-markedtreeandMehrdad’sDokhtar-koshpaths给定一颗以\(1\)为根的树每个节点上有一个\(a\simv\)的小写字母,求每个子树内最长的链的长度......
  • .NET编译器错误 CS5001
    需要在项目.csprog文件中显式添加<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp2.1</Targ......
  • HDU 3349 Consumer
    ​​题目链接​​题目背景有依赖的背包,下面用我常用的变量和说法。题目大意有个主件和块钱,每个主件都有费用和对应的个附件,附件也有费用与价值,购买主件后才能购买附件,问怎......
  • AcWing 216. Rainbow的信号
    题目链接:​​传送门​​将权值转化成二进制来看,最多30位枚举每一位并且枚举一个右端点通过这个右端点判断有多少个左端点符合条件,累计贡献要注意单独讨论左端点等于右端......
  • AcWing 100. IncDec序列
    题目链接:​​传送门​​将序列转化成差分数列那么题目就变成了对一个数组可进行三种操作对两个元素一个加一一个减一或对一个元素加一或对一个元素减一其实后面两种操作......
  • LOJ #6175. 「美团 CodeM 初赛 Round B」黑白树
    题目链接:​​传送门​​一个很贪心的数位dp显然从叶节点开始染色是优的因为相比更靠上的节点来说会染到更多的节点那就先去染叶节点,在他的父亲节点处判断是否被覆盖如果......
  • 01.BeanFactory实现
    /**beanFactory不会做的事:*1.不会主动调用BeanFactory后处理器*2.不会主动添加Bean后处理器*3.不会主动初始化单例(懒加载)*4.不会解析beanFactory还不会解析......
  • AcWing 297. 赤壁之战
    题目链接:很容易想到一个dp:表示长度为,以结尾的上升子序列的个数转移的话就是从到枚举一个表示长度,再从到枚举一个,再从到枚举一个转移就是如果,表示可以接在后面,那么复杂度,......
  • JavaScript对象-RegExp、Global
    JavaScript对象-RegExpRegExp:正则表达式对象正则表达式:定义字符串的组成规则单个字符:[]特殊符号代表特殊含义的单个字符:/d:......