前言
嗨,大家好!
在 C# 的世界里,枚舉(Enum)讓我們可以用更直觀的方式來表示一組相關的常量,比如 HTTP 方法、狀態碼等。
通過擴展方法,我們可以為枚舉賦予更多的功能,使其在實際應用中更加靈活。
今天,我們要分享的就是 4 個我在工作中常用的枚舉擴展方法:獲取枚舉描述、描述轉枚舉、字符串轉枚舉和數字轉枚舉等。
這些方法在我的工作中幫助挺大的,希望對你也有所啟發,讓我們一起來看看吧!
枚舉擴展方法
以下是完整的枚舉擴展方法,留意代碼中的注釋:
public static class EnumUtil
{
/// <summary>
/// 獲取枚舉描述
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string ToDescription(this Enum value)
{
if (value == null) return "";
System.Reflection.FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
object[] attribArray = fieldInfo.GetCustomAttributes(false);
if (attribArray.Length == 0)
{
return value.ToString();
}
else
{
return (attribArray[0] as DescriptionAttribute).Description;
}
}
/// <summary>
/// 根據描述獲取枚舉值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="description"></param>
/// <returns></returns>
public static T GetEnumByDescription<T>(this string description) where T : Enum
{
if (!string.IsNullOrWhiteSpace(description))
{
System.Reflection.FieldInfo[] fields = typeof(T).GetFields();
foreach (System.Reflection.FieldInfo field in fields)
{
//獲取描述屬性
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs.Length > 0 && (objs[0] as DescriptionAttribute).Description == description)
{
return (T)field.GetValue(null);
}
}
}
throw new ArgumentException(string.Format("{0} 未能找到對應的枚舉.", description), "Description");
}
/// <summary>
/// 數字轉枚舉
/// </summary>
/// <returns></returns>
public static T ToEnum<T>(this int intValue) where T : Enum
{
return (T)Enum.ToObject(typeof(T), intValue);
}
/// <summary>
/// 字符串轉枚舉
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="enumString"></param>
/// <returns></returns>
public static T ToEnum<T>(this string enumString) where T : Enum
{
return (T)Enum.Parse(typeof(T), enumString);
}
}
使用
1. 創建枚舉
首先,我們來定義一個枚舉,表示 HTTP 方法類型:
public enum HttpMethodType
{
[Description("查詢數據")]
GET = 1,
[Description("保存數據")]
POST = 2,
[Description("更新數據")]
PUT = 3,
[Description("刪除數據")]
DELETE = 4
}
2. 使用擴展方法
接下來,我們在 Program.cs
文件里使用這些擴展方法:
using EumnSample;
// 1. 獲取枚舉的描述
HttpMethodType httpMethodType = HttpMethodType.GET;
string getMethodDesc = httpMethodType.ToDescription();
Console.WriteLine(getMethodDesc);
// 2. 根據描述獲取相應的枚舉
string postMethodDesc = "保存數據";
HttpMethodType postMethodType = postMethodDesc.GetEnumByDescription<HttpMethodType>();
Console.WriteLine(postMethodType.ToString());
// 3. 根據枚舉名稱獲取相應的枚舉
string putMethodStr = "PUT";
HttpMethodType putMethodType = putMethodStr.ToEnum<HttpMethodType>();
Console.WriteLine(putMethodType.ToString());
// 4. 根據枚舉的值獲取相應的枚舉
int delMethodValue = 4;
HttpMethodType delMethodType = delMethodValue.ToEnum<HttpMethodType>();
Console.WriteLine(delMethodType.ToString());
3. 運行
運行程序,即可看到枚舉擴展方法的強大功能,如圖所示:
總結
通過這幾個枚舉擴展方法,我們可以更加靈活地操作枚舉,讓代碼更加優雅和高效。
該文章在 2024/11/27 9:18:52 編輯過