詳解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#數據源返回前端的資料請關注腳本之家其它相關文章!

