詳解C#如何將枚舉以下拉數據源的形式返回給前端
前言
相信各位有碰到過與我類似的問題,當表中存一些狀態(tài)的字段,無非以下幾種形式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
的枚舉類型,其中包含了兩個值:Start
和NotStart
。每個值都具有一個DescriptionAttribute
,其中包含了對應的描述。
在Main
方法中,我們調用GetEnumValues
方法來獲取枚舉類型StartStateEnum
中的所有字段值,并將返回的字段值集合存儲在enumValues
變量中。
然后,我們遍歷字段值集合,并將每個字段值輸出到控制臺。
請注意,我們定義了一個名為GetEnumValues
的輔助方法,用于獲取枚舉類型的字段值。該方法使用反射來獲取字段的值,并將其添加到集合中。我們還添加了一些驗證,以確保傳遞的類型是有效的枚舉類型。
運行以上代碼,輸出將是:
1 Start 2 NotStart
這證明成功將枚舉類型StartStateEnum
的字段值添加到集合中并返回。請根據實際情況修改示例代碼中的枚舉類型和字段處理邏輯。
實現
1.創(chuàng)建一個枚舉幫助類,并加上上面的邏輯代碼:
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() });
結尾
通過枚舉將表中狀態(tài)已獲取下拉數據源的形式響應給前端,代碼可維護性和擴展性的優(yōu)勢非常的明顯,也不必要去浪費數據庫的資源,是一個非常不錯的方法,當然了,一些變化比較多業(yè)務邏輯代碼較少的一些字段還是建議在字典中維護起來,如角色,類型等,
以上就是詳解C#如何將枚舉以下拉數據源的形式返回給前端的詳細內容,更多關于C#數據源返回前端的資料請關注腳本之家其它相關文章!
相關文章
C#創(chuàng)建Windows Service(Windows 服務)的方法步驟
本文介紹了如何用C#創(chuàng)建、安裝、啟動、監(jiān)控、卸載簡單的Windows Service 的內容步驟和注意事項,具有一定的參考價值,感興趣的可以了解一下2023-11-11C#中Trim()、TrimStart()、TrimEnd()的用法介紹
這篇文章主要介紹了C#中Trim()、TrimStart()、TrimEnd()的用法,有需要的朋友可以參考一下2014-01-01