詳解C#如何將枚舉以下拉數(shù)據(jù)源的形式返回給前端
前言
相信各位有碰到過(guò)與我類似的問(wèn)題,當(dāng)表中存一些狀態(tài)的字段,無(wú)非以下幾種形式1.直接寫(xiě)死 如: 正常:1,異常:2 ,還有一種則是寫(xiě)在字典中,再或者就是加在枚舉上,前兩者對(duì)于返回下拉數(shù)據(jù)源來(lái)說(shuō)比較好處理,直接寫(xiě)死和查數(shù)據(jù)庫(kù),但都有各自的缺點(diǎn),寫(xiě)死維護(hù)比較麻煩,查數(shù)據(jù)庫(kù)也沒(méi)必要,這個(gè)時(shí)候枚舉就可以解決這個(gè)問(wèn)題.
實(shí)現(xiàn)邏輯
要返回一個(gè)List<StartStateEnum>
,其中包含枚舉類型StartStateEnum
的所有字段值,你可以使用反射來(lái)實(shí)現(xiàn)。以下是一個(gè)示例代碼,演示了如何將枚舉類型中的字段值添加到集合并返回:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; public class Program { public enum StartStateEnum { [Description("啟動(dòng)")] Start = 0, [Description("未啟動(dòng)")] 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); // 驗(yàn)證是否為枚舉類型 if (!enumType.IsEnum) { throw new ArgumentException("The specified type is not an enum."); } // 獲取枚舉中的所有字段 FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static); // 存儲(chǔ)字段值的集合 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; } }
在上述示例中,我們定義了一個(gè)名為StartStateEnum
的枚舉類型,其中包含了兩個(gè)值:Start
和NotStart
。每個(gè)值都具有一個(gè)DescriptionAttribute
,其中包含了對(duì)應(yīng)的描述。
在Main
方法中,我們調(diào)用GetEnumValues
方法來(lái)獲取枚舉類型StartStateEnum
中的所有字段值,并將返回的字段值集合存儲(chǔ)在enumValues
變量中。
然后,我們遍歷字段值集合,并將每個(gè)字段值輸出到控制臺(tái)。
請(qǐng)注意,我們定義了一個(gè)名為GetEnumValues
的輔助方法,用于獲取枚舉類型的字段值。該方法使用反射來(lái)獲取字段的值,并將其添加到集合中。我們還添加了一些驗(yàn)證,以確保傳遞的類型是有效的枚舉類型。
運(yùn)行以上代碼,輸出將是:
1 Start 2 NotStart
這證明成功將枚舉類型StartStateEnum
的字段值添加到集合中并返回。請(qǐng)根據(jù)實(shí)際情況修改示例代碼中的枚舉類型和字段處理邏輯。
實(shí)現(xiàn)
1.創(chuàng)建一個(gè)枚舉幫助類,并加上上面的邏輯代碼:
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); // 驗(yàn)證是否為枚舉類型 if (!enumType.IsEnum) { throw new ArgumentNullException("指定的類型不是枚舉。"); } // 獲取枚舉中的所有字段 FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static); // 存儲(chǔ)字段值的集合 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.調(diào)用和結(jié)果:
// GetDescription 獲取枚舉描述的擴(kuò)展方法,感興趣的小伙伴可以去看我之前的文章~ result.ResData = EnumHelper.GetEnumValues<StartStateEnum>().Select(d => new KeyValue { Key = Convert.ToInt32(d).ToString(), Value = d.GetDescription() });
結(jié)尾
通過(guò)枚舉將表中狀態(tài)已獲取下拉數(shù)據(jù)源的形式響應(yīng)給前端,代碼可維護(hù)性和擴(kuò)展性的優(yōu)勢(shì)非常的明顯,也不必要去浪費(fèi)數(shù)據(jù)庫(kù)的資源,是一個(gè)非常不錯(cuò)的方法,當(dāng)然了,一些變化比較多業(yè)務(wù)邏輯代碼較少的一些字段還是建議在字典中維護(hù)起來(lái),如角色,類型等,
以上就是詳解C#如何將枚舉以下拉數(shù)據(jù)源的形式返回給前端的詳細(xì)內(nèi)容,更多關(guān)于C#數(shù)據(jù)源返回前端的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在C#中處理時(shí)間戳和時(shí)區(qū)的解決方法
處理時(shí)間戳和不同的時(shí)區(qū)可能是軟件開(kāi)發(fā)中的一個(gè)棘手問(wèn)題,尤其是當(dāng)系統(tǒng)不確定給定的日期時(shí)間是UTC還是本地時(shí)間時(shí),通常會(huì)遇到與時(shí)間轉(zhuǎn)換相關(guān)的問(wèn)題,在這篇文章中,我將分享我們?nèi)绾卧贑#中處理時(shí)間戳和時(shí)區(qū),需要的朋友可以參考下2024-06-06C#創(chuàng)建Windows Service(Windows 服務(wù))的方法步驟
本文介紹了如何用C#創(chuàng)建、安裝、啟動(dòng)、監(jiān)控、卸載簡(jiǎn)單的Windows Service 的內(nèi)容步驟和注意事項(xiàng),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11C#動(dòng)態(tài)創(chuàng)建button的方法
這篇文章主要介紹了C#動(dòng)態(tài)創(chuàng)建button的方法,涉及C#按鈕屬性動(dòng)態(tài)設(shè)置的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08基于C#實(shí)現(xiàn)ModbusTCP服務(wù)器接口的方法
ModbusTCP服務(wù)器的本質(zhì)就是TCP服務(wù)器,根據(jù)識(shí)別ModbusTCP請(qǐng)求報(bào)文,返回對(duì)應(yīng)的ModbusTCP報(bào)文,今天給大家分享一下,如何基于C#來(lái)ModbusTCP服務(wù)器接口,需要的朋友可以參考下2025-01-01淺談C# AOP的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了淺談C# AOP的簡(jiǎn)單實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07C#中Trim()、TrimStart()、TrimEnd()的用法介紹
這篇文章主要介紹了C#中Trim()、TrimStart()、TrimEnd()的用法,有需要的朋友可以參考一下2014-01-01C#中使用NLog庫(kù)進(jìn)行日志記錄的流程詳解
NLog 是 .NET 的日志記錄框架,具有豐富的日志路由和管理能力,極大地幫助您生成和管理日志,NLog 是一個(gè)庫(kù),可以輕松地同時(shí)記錄和管理多個(gè)不同區(qū)域中的數(shù)據(jù),本文將給大家介紹在C#中使用 NLog 庫(kù)進(jìn)行日志記錄的教程,需要的朋友可以參考下2024-06-06