LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

分享4个常用C#枚举扩展方法,包括字符串转枚举和数字转枚举等,让枚举在实际应用中更加灵活

admin
2024年11月27日 9:18 本文热度 550

前言

嗨,大家好!

在 C# 的世界里,枚举(Enum)让我们可以用更直观的方式来表示一组相关的常量,比如 HTTP 方法、状态码等。

通过扩展方法,我们可以为枚举赋予更多的功能,使其在实际应用中更加灵活。

今天,我们要分享的就是 4 个我在工作中常用的枚举扩展方法:获取枚举描述、描述转枚举、字符串转枚举和数字转枚举等。

这些方法在我的工作中帮助挺大的,希望对你也有所启发,让我们一起来看看吧!

枚举扩展方法

以下是完整的枚举扩展方法,留意代码中的注释

public static class EnumUtil
{
    /// <summary>
    /// 获取枚举描述
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public static string ToDescription(this Enum value)
    {
        if (value == nullreturn "";

        System.Reflection.FieldInfo fieldInfo = value.GetType().GetField(value.ToString());

        object[] attribArray = fieldInfo.GetCustomAttributes(false);
        if (attribArray.Length == 0)
        {
            return value.ToString();
        }
        else
        {
            return (attribArray[0as DescriptionAttribute).Description;
        }
    }

    /// <summary>
    /// 根据描述获取枚举值
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="description"></param>
    /// <returns></returns>
    public static T GetEnumByDescription<T>(this string description) where T : Enum
    {
        if (!string.IsNullOrWhiteSpace(description))
        {
            System.Reflection.FieldInfo[] fields = typeof(T).GetFields();
            foreach (System.Reflection.FieldInfo field in fields)
            {
                //获取描述属性
                object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);    
                if (objs.Length > 0 && (objs[0as DescriptionAttribute).Description == description)
                {
                    return (T)field.GetValue(null);
                }
            }
        }

        throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description");
    }

    /// <summary>
    /// 数字转枚举
    /// </summary>
    /// <returns></returns>
    public static T ToEnum<T>(this int intValue) where T : Enum
    {
        return (T)Enum.ToObject(typeof(T), intValue);
    }

    /// <summary>
    /// 字符串转枚举
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="enumString"></param>
    /// <returns></returns>
    public static T ToEnum<T>(this string enumString) where T : Enum
    {
        return (T)Enum.Parse(typeof(T), enumString);
    }
}

使用

1. 创建枚举

首先,我们来定义一个枚举,表示 HTTP 方法类型:

public enum HttpMethodType
{
    [Description("查询数据")]
    GET = 1,
    [Description("保存数据")]
    POST = 2,
    [Description("更新数据")]
    PUT = 3,
    [Description("删除数据")]
    DELETE = 4
}
2. 使用扩展方法

接下来,我们在 Program.cs 文件里使用这些扩展方法:

using EumnSample;

// 1. 获取枚举的描述
HttpMethodType httpMethodType = HttpMethodType.GET;
string getMethodDesc = httpMethodType.ToDescription();
Console.WriteLine(getMethodDesc);

// 2. 根据描述获取相应的枚举
string postMethodDesc = "保存数据";
HttpMethodType postMethodType = postMethodDesc.GetEnumByDescription<HttpMethodType>();
Console.WriteLine(postMethodType.ToString());

// 3. 根据枚举名称获取相应的枚举
string putMethodStr = "PUT";
HttpMethodType putMethodType = putMethodStr.ToEnum<HttpMethodType>();
Console.WriteLine(putMethodType.ToString());

// 4. 根据枚举的值获取相应的枚举
int delMethodValue = 4;
HttpMethodType delMethodType = delMethodValue.ToEnum<HttpMethodType>();
Console.WriteLine(delMethodType.ToString());
3. 运行

运行程序,即可看到枚举扩展方法的强大功能,如图所示:

总结

通过这几个枚举扩展方法,我们可以更加灵活地操作枚举,让代码更加优雅和高效。


该文章在 2024/11/27 9:18:52 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved