枚举工具-EnumUtil
# 简介
枚举(enum)算一种“语法糖”,是指一个经过排序的、被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值。枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量。
C#中的枚举(enum)是一种特殊的数据类型,用于定义具有固定值集合的变量。枚举类型可以将一组有限的整数值(枚举成员)赋予符号名称,这些符号名称称为枚举常量。
枚举的定义方式如下:
enum <枚举名称>
{
<枚举常量1> = <值1>,
<枚举常量2> = <值2>,
...
}
方法说明:
GetNames<TEnum>()
: 获取指定枚举类型的所有成员名称。GetValues<TEnum>()
: 获取指定枚举类型的所有成员的值。GetName<TEnum>(TEnum value)
: 获取指定枚举值的名称。IsDefined<TEnum>(object value)
: 检查指定的值是否是枚举类型TEnum的成员。Parse<TEnum>(string value)
: 将字符串转换为枚举类型TEnum的值。Parse<TEnum>(string value, TEnum defaultValue)
: 将字符串转换为枚举类型- TEnum的值。如果字符串无法转换,则返回默认值。GetEnumType<TEnum>()
: 获取指定枚举类型的Type对象。GetValuesDictionary<TEnum>()
: 获取指定枚举类型的所有成员的名称和值的键值- 对。GetDescriptions<TEnum>()
: 获取指定枚举类型的所有成员的注释。GetDescription<TEnum>(TEnum value)
: 获取指定枚举类型的指定成员的注释。GetDisplayName<TEnum>(TEnum value)
: 获取指定枚举类型的指定成员的Display名- 称。GetDisplayNames<TEnum>()
: 获取指定枚举类型的所有成员的Display名称。GetValueByName<TEnum>(string name)
: 获取指定枚举类型的指定值的名称。GetNameByValue<TEnum>(TEnum value)
: 获取指定枚举类型的指定值的名称。GetDescriptionByValue<TEnum>(TEnum value)
: 获取指定枚举类型的指定值的注- 释。GetDisplayNameByValue<TEnum>(TEnum value)
: 获取指定枚举类型的指定值的Display名称。
# EasyTool. 类
静态工具类 ,除了包含基本的枚举操作方法外,还包括了一些针对枚举类型的attribute的处理方法。这个工具是根据常见的需求而编写的,但可能并不是完全全面的,因此你可以根据你自己的需求对其进行修改和扩展。
# GetNames-获取指定枚举类型的所有成员名称
/// <summary>
/// 获取指定枚举类型的所有成员名称
/// </summary>
/// <typeparam name="TEnum">要获取成员名称的枚举类型</typeparam>
/// <returns>所有成员名称的字符串数组</returns>
public static string[] GetNames<TEnum>()
# GetValues-获取指定枚举类型的所有成员的值
/// <summary>
/// 获取指定枚举类型的所有成员的值
/// </summary>
/// <typeparam name="TEnum">要获取成员值的枚举类型</typeparam>
/// <returns>所有成员值的数组</returns>
public static TEnum[] GetValues<TEnum>()
# GetName-获取指定枚举值的名称
/// <summary>
/// 获取指定枚举值的名称
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">枚举值</param>
/// <returns>枚举值的名称</returns>
public static string GetName<TEnum>(TEnum value)
# IsDefined-检查指定的值是否是枚举类型TEnum的成员
/// <summary>
/// 检查指定的值是否是枚举类型TEnum的成员
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">要检查的值</param>
/// <returns>如果指定的值是TEnum的成员,则为true;否则为false</returns>
public static bool IsDefined<TEnum>(object value)
# Parse-将字符串转换为枚举类型TEnum的值
/// <summary>
/// 将字符串转换为枚举类型TEnum的值
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">要转换的字符串</param>
/// <returns>与字符串对应的枚举值</returns>
public static TEnum Parse<TEnum>(string value)
/// <summary>
/// 将字符串转换为枚举类型TEnum的值如果字符串无法转换,则返回默认值
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">要转换的字符串</param>
/// <param name="defaultValue">默认值</param>
/// <returns>与字符串对应的枚举值,或默认值(如果字符串无法转换)</returns>
public static TEnum Parse<TEnum>(string value, TEnum defaultValue)
# GetEnumType-获取指定枚举类型的Type对象
/// <summary>
/// 获取指定枚举类型的Type对象
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <returns>枚举类型的Type对象</returns>
public static Type GetEnumType<TEnum>()
# GetValuesDictionary-获取指定枚举类型的所有成员的名称和值的键值对
/// <summary>
/// 获取指定枚举类型的所有成员的名称和值的键值对
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <returns>所有成员名称和值的键值对</returns>
public static IDictionary<string, TEnum> GetValuesDictionary<TEnum>()
# GetDescriptions-获取指定枚举类型的所有成员的注释
/// <summary>
/// 获取指定枚举类型的所有成员的注释
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <returns>所有成员注释的字典,其中键是成员名称,值是注释内容</returns>
public static IDictionary<string, string> GetDescriptions<TEnum>()
# GetDescription-获取指定枚举类型的指定成员的注释
/// <summary>
/// 获取指定枚举类型的指定成员的注释
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">枚举成员</param>
/// <returns>成员注释的字符串</returns>
public static string GetDescription<TEnum>(TEnum value)
# GetDisplayName-获取指定枚举类型的指定成员的Display名称
/// <summary>
/// 获取指定枚举类型的指定成员的Display名称
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">枚举成员</param>
/// <returns>成员的Display名称,如果未设置,则返回枚举成员的名称</returns>
public static string GetDisplayName<TEnum>(TEnum value)
/// <summary>
/// 获取指定枚举类型的所有成员的Display名称
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <returns>所有成员的Display名称的字典,其中键是成员名称,值是Display名称</returns>
public static IDictionary<string, string> GetDisplayNames<TEnum>()
# GetValueByName-获取指定枚举类型的指定成员的值
/// <summary>
/// 获取指定枚举类型的指定成员的值
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="name">成员名称</param>
/// <returns>成员的值,如果成员不存在,则返回默认值</returns>
public static TEnum GetValueByName<TEnum>(string name)
# GetNameByValue-获取指定枚举类型的指定值的名称
/// <summary>
/// 获取指定枚举类型的指定值的名称
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">枚举值</param>
/// <returns>与值对应的名称,如果值不存在,则返回null</returns>
public static string GetNameByValue<TEnum>(TEnum value)
# GetDescriptionByValue-获取指定枚举类型的指定值的注释
/// <summary>
/// 获取指定枚举类型的指定值的注释
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">枚举值</param>
/// <returns>与值对应的注释,如果值不存在或未设置注释,则返回null</returns>
public static string GetDescriptionByValue<TEnum>(TEnum value)
# GetDisplayNameByValue-获取指定枚举类型的指定值的Display名称
/// <summary>
/// 获取指定枚举类型的指定值的Display名称
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="value">枚举值</param>
/// <returns>与值对应的Display名称,如果值不存在或未设置Display名称,则返回null</returns>
public static string GetDisplayNameByValue<TEnum>(TEnum value)
# 使用示例
using System;
using EnumUtil;
public class Program
{
enum Color
{
[Description("红色")]
Red,
[Description("绿色")]
Green,
[Description("蓝色")]
Blue
}
static void Main(string[] args)
{
Console.WriteLine("GetNames<Color>():");
foreach (var name in EnumUtil.GetNames<Color>())
{
Console.WriteLine(name);
}
Console.WriteLine();
Console.WriteLine("GetValues<Color>():");
foreach (var value in EnumUtil.GetValues<Color>())
{
Console.WriteLine(value);
}
Console.WriteLine();
Console.WriteLine("GetName<Color>(Color.Red):");
Console.WriteLine(EnumUtil.GetName<Color>(Color.Red));
Console.WriteLine();
Console.WriteLine("IsDefined<Color>(\"Green\"):");
Console.WriteLine(EnumUtil.IsDefined<Color>("Green"));
Console.WriteLine();
Console.WriteLine("Parse<Color>(\"Blue\"):");
Console.WriteLine(EnumUtil.Parse<Color>("Blue"));
Console.WriteLine();
Console.WriteLine("Parse<Color>(\"Yellow\", Color.Red):");
Console.WriteLine(EnumUtil.Parse<Color>("Yellow", Color.Red));
Console.WriteLine();
Console.WriteLine("GetEnumType<Color>():");
Console.WriteLine(EnumUtil.GetEnumType<Color>());
Console.WriteLine();
Console.WriteLine("GetValuesDictionary<Color>():");
foreach (var kvp in EnumUtil.GetValuesDictionary<Color>())
{
Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}
Console.WriteLine();
Console.WriteLine("GetDescriptions<Color>():");
foreach (var kvp in EnumUtil.GetDescriptions<Color>())
{
Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}
Console.WriteLine();
Console.WriteLine("GetDescription<Color>(Color.Green):");
Console.WriteLine(EnumUtil.GetDescription<Color>(Color.Green));
Console.WriteLine();
Console.WriteLine("GetDisplayName<Color>(Color.Blue):");
Console.WriteLine(EnumUtil.GetDisplayName<Color>(Color.Blue));
Console.WriteLine();
Console.WriteLine("GetDisplayNames<Color>():");
foreach (var kvp in EnumUtil.GetDisplayNames<Color>())
{
Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}
Console.WriteLine();
Console.WriteLine("GetValueByName<Color>(\"Red\"):");
Console.WriteLine(EnumUtil.GetValueByName<Color>("Red"));
Console.WriteLine();
Console.WriteLine("GetNameByValue<Color>(Color.Blue):");
Console.WriteLine(EnumUtil.GetNameByValue<Color>(Color.Blue));
Console.WriteLine();
Console.WriteLine("GetDescriptionByValue<Color>(Color.Green):");
Console.WriteLine(EnumUtil.GetDescriptionByValue<Color>(Color.Green));
Console.WriteLine();
Console.WriteLine("GetDisplayNameByValue<Color>(Color.Red):");
Console.WriteLine(EnumUtil.GetDisplayNameByValue<Color>(Color.Red));
}
}
# 输出结果
GetNames<Color>():
Red
Green
Blue
GetValues<Color>():
Red
Green
Blue
GetName<Color>(Color.Red):
Red
IsDefined<Color>("Green"):
True
Parse<Color>("Blue"):
Blue
Parse<Color>("Yellow", Color.Red):
Red
GetEnumType<Color>():
Color
GetValuesDictionary<Color>():
Red: Red
Green: Green
Blue: Blue
GetDescriptions<Color>():
Red: 红色
Green: 绿色
Blue: 蓝色
GetDescription<Color>(Color.Green):
绿色
GetDisplayName<Color>(Color.Blue):
蓝色
GetDisplayNames<Color>():
Red: Red
Green: Green
Blue: 蓝色
GetValueByName<Color>("Red"):
Red
GetNameByValue<Color>(Color.Blue):
Blue
GetDescriptionByValue<Color>(Color.Green):
绿色
GetDisplayNameByValue<Color>(Color.Red):
Red
# 参考文献
- Microsoft Docs. (2021). Enum.TryParse Method. [online] Available at: - https://docs.microsoft.com/en-us/dotnet/api/system.enum.tryparse?- view=net-5.0 [Accessed 6 Apr. 2023].
- Microsoft Docs. (2021). Enum Class. [online] Available at: https://docs.- microsoft.com/en-us/dotnet/api/system.enum?view=net-5.0 [Accessed 6 Apr. - 2023].
- Microsoft Docs. (2021). Type.GetMembers Method. [online] Available at: - https://docs.microsoft.com/en-us/dotnet/api/system.type.getmembers?- view=net-5.0 [Accessed 6 Apr. 2023].
- Microsoft Docs. (2021). Custom Attributes. [online] Available at: https://- docs.microsoft.com/en-us/dotnet/standard/attributes/?view=net-5.0 [Accessed 6 Apr. 2023].
上次更新: 2023/04/26, 22:10:06