前言:

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

实现逻辑:

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

 1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Reflection;
5
6 public class Program
7 {
8 public enum StartStateEnum
9 {
10 [Description("启动")]
11 Start = 0,
12
13 [Description("未启动")]
14 NotStart = 1
15 }
16
17 public static void Main(string[] args)
18 {
19 // 获取枚举字段值的集合
20 List<StartStateEnum> enumValues = GetEnumValues<StartStateEnum>();
21
22 // 输出集合中的字段值
23 foreach (var value in enumValues)
24 {
25 Console.WriteLine(value);
26 }
27 }
28
29 public static List<T> GetEnumValues<T>()
30 {
31 // 获取枚举类型
32 Type enumType = typeof(T);
33
34 // 验证是否为枚举类型
35 if (!enumType.IsEnum)
36 {
37 throw new ArgumentException("The specified type is not an enum.");
38 }
39
40 // 获取枚举中的所有字段
41 FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
42
43 // 存储字段值的集合
44 List<T> enumValues = new List<T>();
45
46 // 遍历字段并添加字段值到集合
47 foreach (var field in fields)
48 {
49 if (field.FieldType == enumType)
50 {
51 T value = (T)field.GetValue(null);
52 enumValues.Add(value);
53 }
54 }
55
56 return enumValues;
57 }
58 }

在上述示例中,我们定义了一个名为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() });

 结尾:

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

  因为最近工作比较忙,博客比较少更新还请我为数不多的13位粉丝见谅哈哈哈,创作不易,如果对你有帮助不妨留下一颗免费的小红星吧~

  

c# 如何将枚举以下拉数据源的形式返回给前端的更多相关文章

  1. java操作poi生成excel.xlsx(设置下拉框)下载本地和前端下载

    需求:导入excel表格,如果excel有错误,将错误的地方标红,在把数据以excel的形式写出,供用户下载解决方案:1.以实体类的方式接收excel并解析(创建两个集合一个接收正常的数据一个接收错误 ...

  2. 【Java Web】项目通用返回模块ServerResponse:枚举code状态码、泛型返回值、序列化注解限制数据

    一.枚举类编写ResponseCode package com.boulderaitech.common; /** * 编写枚举类的步骤 * (1)编写所需的变量 * (2)编写枚举类构造方法 * ( ...

  3. C#中的LINQ 基础

    1.LINQ的数据源 必须可枚举的,即必须是数组或者集合 (继承了IEnumerable<T>接口就可以,注意是IEnumerable<T>,不是IEnumerable接口,不 ...

  4. 【转】【C#】C# 不常用关键字

    1.__arglist 让我们先从__arglist开始. __arglist是用来给方法传送参数.通常我们是通过函数头部指定的参数列表给方法传递参数的.如果我们想要给方法传递一组新的参数,我们需要重 ...

  5. C#基础:关键字和数据类型

    [关键字]  #region 和 #endregion 关键字可以折叠代码  checked 用于整型算术运算时控制当前环境中的溢出检查  unchecked 操作符用于整型算术运算时控制当前环境中的 ...

  6. 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程

    额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...

  7. DotNet基础

    DotNet基础 URL特殊字符转义 摘要: URL中一些字符的特殊含义,基本编码规则如下: 1.空格换成加号(+) 2.正斜杠(/)分隔目录和子目录 3.问号(?)分隔URL和查询 4.百分号(%) ...

  8. 一个C#程序员学习微信小程序的笔记

    客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在启动的时候,将首页的代码装载进来,通 ...

  9. 自定义CRM系统

    写在前面 之前在windows上写代码逻辑.搞前端等花了很长时间,跑通之后一直没往centos上部署, 昨天尝试部署下,结果发现静态文件找不到 =='' 由于写了2个组件: - arya model的 ...

  10. springBoot的搭建使用记录

    一: 首次搭建:https://blog.csdn.net/u013187139/article/details/68944972 整合mybatis: https://www.jianshu.com ...

随机推荐

  1. Windows7卡在正在关机

    据我的分析,Windows系统卡在正在关机的原因很大可能性是破解过系统主题.解决方法就是还原成主题未被破解时候的状态.但是这种情况是随机性的,但是可以确定的是,只要是破解过系统主题,都有一定概率关不了 ...

  2. 保持唯一性,请停止使用【python3 内置hash() 函数】

    问题: 如图,用hash() 筛重时竟然出现了重复. 如下图: hash字符串时,同一窗口的是一致的,不同窗口结果竟然不同. 原因: python的字符串hash算法并不是直接遍历字符串每个字符去计算 ...

  3. DataLeap 数据资产实战:如何实现存储优化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 DataLeap 作为一站式数据中台套件,汇集了字节内部多年积累的数据集成.开发.运维.治理.资产.安全等全 ...

  4. mumpy常用函数

    numpy.array(list(1,2,3,4)) #将一个list类型/tupe类型数据转换为一个array数组对象 #默认所有的数据类型都是相同,若传进来的参数类型不同,则遵循以下优先级: st ...

  5. day31:socketserver&hashlib&hmac&TCP登录

    目录 1.socketserver:实现TCP协议下Server端的并发 2.hashlib模块 3.hashlib应用:文件校验 4.hmac应用:服务器的合法性校验 5.TCP登录程序 1.soc ...

  6. QUIC协议 对比 TCP/UDP 协议

    QUIC协议是HTTP3引入的,所以需要了解HTTP的版本迭代. HTTP1.x 队头阻塞:下个请求必须在前一个请求返回后才能发出,导致带宽无法被充分利用,后续请求被阻塞(HTTP 1.1 尝试使用流 ...

  7. 关于Java中对象的向上转型和向下转型

    什么是多态? 同一个类调用同一个方法会产生不同的影响/结果 这就是多态 public class Pet{ public void eat(){ System.out.println("Pe ...

  8. .net使用nacos配置,手把手教你分布式配置中心

    .net使用nacos配置,手把手教你分布式配置中心 Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. 这么优秀的分布式服务管理平台,怎么能不接入呢? nacos的安装和使 ...

  9. Caused by: java.net.BindException: Address already in use: JVM_Bind(ActiveMq已经启动)

    1.本地启动项目开启两个启动类出错. Error creating bean with name 'brokerService' defined in class path resource [com ...

  10. 如何通过C#/VB.NET 代码调整PDF文档的页边距

    PDF边距是页面主要内容区域和页面边缘之间的距离.与Word页边距不同,PDF文档的页边距很难更改.因为Adobe没有提供操作页边距的直接方法.但是,您可以通过缩放页面内容来改变页边距.本文将介绍如何 ...