详解C#如何将枚举以下拉数据源的形式返回给前端

 更新时间:2023年06月08日 14:08:46   作者:沈威  
这篇文章主要为大家详细介绍了C#如何实现将枚举以下拉数据源的形式返回给前端,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下

前言

相信各位有碰到过与我类似的问题,当表中存一些状态的字段,无非以下几种形式1.直接写死 如: 正常:1,异常:2 ,还有一种则是写在字典中,再或者就是加在枚举上,前两者对于返回下拉数据源来说比较好处理,直接写死和查数据库,但都有各自的缺点,写死维护比较麻烦,查数据库也没必要,这个时候枚举就可以解决这个问题.

实现逻辑

要返回一个List<StartStateEnum>,其中包含枚举类型StartStateEnum的所有字段值,你可以使用反射来实现。以下是一个示例代码,演示了如何将枚举类型中的字段值添加到集合并返回:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
public class Program
{
    public enum StartStateEnum
    {
        [Description("启动")]
        Start = 0,
        [Description("未启动")]
        NotStart = 1
    }
    public static void Main(string[] args)
    {
        // 获取枚举字段值的集合
        List<StartStateEnum> enumValues = GetEnumValues<StartStateEnum>();
        // 输出集合中的字段值
        foreach (var value in enumValues)
        {
            Console.WriteLine(value);
        }
    }
    public static List<T> GetEnumValues<T>()
    {
        // 获取枚举类型
        Type enumType = typeof(T);
        // 验证是否为枚举类型
        if (!enumType.IsEnum)
        {
            throw new ArgumentException("The specified type is not an enum.");
        }
        // 获取枚举中的所有字段
        FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
        // 存储字段值的集合
        List<T> enumValues = new List<T>();
        // 遍历字段并添加字段值到集合
        foreach (var field in fields)
        {
            if (field.FieldType == enumType)
            {
                T value = (T)field.GetValue(null);
                enumValues.Add(value);
            }
        }
        return enumValues;
    }
}

在上述示例中,我们定义了一个名为StartStateEnum的枚举类型,其中包含了两个值:StartNotStart。每个值都具有一个DescriptionAttribute,其中包含了对应的描述。

Main方法中,我们调用GetEnumValues方法来获取枚举类型StartStateEnum中的所有字段值,并将返回的字段值集合存储在enumValues变量中。

然后,我们遍历字段值集合,并将每个字段值输出到控制台。

请注意,我们定义了一个名为GetEnumValues的辅助方法,用于获取枚举类型的字段值。该方法使用反射来获取字段的值,并将其添加到集合中。我们还添加了一些验证,以确保传递的类型是有效的枚举类型。

运行以上代码,输出将是:

1 Start 2 NotStart 

这证明成功将枚举类型StartStateEnum的字段值添加到集合中并返回。请根据实际情况修改示例代码中的枚举类型和字段处理逻辑。

实现

1.创建一个枚举帮助类,并加上上面的逻辑代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Yuebon.Commons.Helpers
{
    /// <summary>
    /// 枚举帮助类
    /// </summary>
    public static class EnumHelper
    {
        /// <summary>
        /// 获取枚举中所有字段
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static List<T> GetEnumValues<T>()
        {
            // 获取枚举类型
            Type enumType = typeof(T);
            // 验证是否为枚举类型
            if (!enumType.IsEnum)
            {
                throw new ArgumentNullException("指定的类型不是枚举。");
            }
            // 获取枚举中的所有字段
            FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
            // 存储字段值的集合
            List<T> enumValues = new List<T>();
            // 遍历字段并添加字段值到集合
            foreach (var field in fields)
            {
                if (field.FieldType == enumType)
                {
                    T value = (T)field.GetValue(null);
                    enumValues.Add(value);
                }
            }
            return enumValues;
        }
    }
}

2.调用和结果:

// GetDescription 获取枚举描述的扩展方法,感兴趣的小伙伴可以去看我之前的文章~
result.ResData = EnumHelper.GetEnumValues<StartStateEnum>().Select(d => new KeyValue { Key = Convert.ToInt32(d).ToString(), Value = d.GetDescription() });

结尾

通过枚举将表中状态已获取下拉数据源的形式响应给前端,代码可维护性和扩展性的优势非常的明显,也不必要去浪费数据库的资源,是一个非常不错的方法,当然了,一些变化比较多业务逻辑代码较少的一些字段还是建议在字典中维护起来,如角色,类型等,

以上就是详解C#如何将枚举以下拉数据源的形式返回给前端的详细内容,更多关于C#数据源返回前端的资料请关注脚本之家其它相关文章!

相关文章

  • C#调用Python脚本的简单示例

    C#调用Python脚本的简单示例

    这篇文章主要为大家详细介绍了C#调用Python脚本的简单示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • C# 键盘Enter键取代Tab键实现代码

    C# 键盘Enter键取代Tab键实现代码

    这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
    2013-11-11
  • C# String Replace高效的实例方法

    C# String Replace高效的实例方法

    C# String Replace高效的实例方法,需要的朋友可以参考一下
    2013-05-05
  • C#网站生成静态页面的实例讲解

    C#网站生成静态页面的实例讲解

    今天小编就为大家分享一篇关于C#网站生成静态页面的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C# 7.2中结构体性能问题的解决方案

    C# 7.2中结构体性能问题的解决方案

    这篇文章主要给大家介绍了关于C# 7.2中结构体性能问题的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • C#数组中List, Dictionary的相互转换问题

    C#数组中List, Dictionary的相互转换问题

    这篇文章主要介绍了C#数组中List, Dictionary的相互转换问题,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • C#实现FFT(递归法)的示例代码

    C#实现FFT(递归法)的示例代码

    FFT是数字信号处理中的重要算法。这篇文章将为大家详细介绍一下如何利用C#语言实现FFT(递归法),文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-07-07
  • C#实现字母与ASCII码互相转换

    C#实现字母与ASCII码互相转换

    ASCII是基于拉丁字母的编码系统,也是现今最通用的单字节编码系统,本文主要为大家详细介绍了如何使用C#实现字母与ASCII码互转,需要的可以参考下
    2024-01-01
  • Unity3D Shader实现贴图切换效果

    Unity3D Shader实现贴图切换效果

    这篇文章主要为大家详细介绍了Unity3D Shader实现贴图切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C#使用selenium实现爬虫

    C#使用selenium实现爬虫

    这篇文章介绍了C#使用selenium实现爬虫的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论