EnumExtensions
EnumExtensions 功能文档
Section titled “EnumExtensions 功能文档”EnumExtensions 是一个静态扩展类,为枚举类型提供了丰富的扩展方法,涵盖枚举值判断、转换、描述、标志位操作等功能,旨在简化枚举类型的使用,提高代码的可读性和便捷性,特别是处理需要枚举描述和标志位枚举等复杂场景。
主要功能模块
Section titled “主要功能模块”1. 基础判断
Section titled “1. 基础判断”IsDefined
Section titled “IsDefined”判断枚举值是否定义在枚举类型中。
public static bool IsDefined<TEnum>(this TEnum value) where TEnum : struct, Enum参数:
value: 待判断的枚举值
返回值:
- 如果枚举值已定义返回 true;否则返回 false
示例:
enum Status { Active = 1, Inactive = 2 }
var status = (Status)1;var isDefined = status.IsDefined(); // true
var invalidStatus = (Status)999;var isInvalid = invalidStatus.IsDefined(); // falseIsValid
Section titled “IsValid”判断枚举值是否有效(已定义或在标志枚举中为有效组合)。
public static bool IsValid<TEnum>(this TEnum value) where TEnum : struct, Enum参数:
value: 待判断的枚举值
返回值:
- 如果枚举值有效返回 true;否则返回 false
示例:
[Flags]enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4 }
var perm = Permissions.Read | Permissions.Write;var isValid = perm.IsValid(); // true
var invalidPerm = (Permissions)8;var isInvalid = invalidPerm.IsValid(); // falseIsDefault
Section titled “IsDefault”判断枚举值是否为默认值(通常为 0)。
public static bool IsDefault<TEnum>(this TEnum value) where TEnum : struct, Enum参数:
value: 待判断的枚举值
返回值:
- 如果枚举值为默认值返回 true;否则返回 false
示例:
enum Status { None = 0, Active = 1 }
var status = Status.None;var isDefault = status.IsDefault(); // true
var active = Status.Active;var isNotDefault = active.IsDefault(); // falseIsNotDefault
Section titled “IsNotDefault”判断枚举值是否为非默认值。
public static bool IsNotDefault<TEnum>(this TEnum value) where TEnum : struct, Enum2. 类型转换
Section titled “2. 类型转换”枚举值转为 int。
public static int ToInt<TEnum>(this TEnum value) where TEnum : struct, Enum示例:
enum Status { Active = 1, Inactive = 2 }
var status = Status.Active;var intValue = status.ToInt(); // 1ToLong
Section titled “ToLong”枚举值转为 long。
public static long ToLong<TEnum>(this TEnum value) where TEnum : struct, EnumToByte
Section titled “ToByte”枚举值转为 byte。
public static byte ToByte<TEnum>(this TEnum value) where TEnum : struct, EnumToShort
Section titled “ToShort”枚举值转为 short。
public static short ToShort<TEnum>(this TEnum value) where TEnum : struct, EnumToSByte
Section titled “ToSByte”枚举值转为 sbyte。
public static sbyte ToSByte<TEnum>(this TEnum value) where TEnum : struct, EnumToUShort
Section titled “ToUShort”枚举值转为 ushort。
public static ushort ToUShort<TEnum>(this TEnum value) where TEnum : struct, EnumToUInt
Section titled “ToUInt”枚举值转为 uint。
public static uint ToUInt<TEnum>(this TEnum value) where TEnum : struct, EnumToULong
Section titled “ToULong”枚举值转为 ulong。
public static ulong ToULong<TEnum>(this TEnum value) where TEnum : struct, EnumToStringValue
Section titled “ToStringValue”枚举值转为字符串。
public static string ToStringValue<TEnum>(this TEnum value) where TEnum : struct, Enum示例:
enum Status { Active, Inactive }
var status = Status.Active;var str = status.ToStringValue(); // "Active"ToLowerString
Section titled “ToLowerString”枚举值转为小写字符串。
public static string ToLowerString<TEnum>(this TEnum value) where TEnum : struct, EnumToUpperString
Section titled “ToUpperString”枚举值转为大写字符串。
public static string ToUpperString<TEnum>(this TEnum value) where TEnum : struct, Enum3. 字符串解析
Section titled “3. 字符串解析”字符串转为枚举值,转换失败返回默认值。
public static TEnum Parse<TEnum>(this string value, TEnum defaultValue = default, bool ignoreCase = true) where TEnum : struct, Enum参数:
value: 字符串值defaultValue: 转换失败时的默认值ignoreCase: 是否忽略大小写,默认 true
返回值:
- 解析后的枚举值
示例:
enum Status { Active, Inactive }
var status = "Active".Parse<Status>(); // Status.Activevar status2 = "active".Parse<Status>(); // Status.Active (忽略大小写)var status3 = "invalid".Parse(Status.Inactive); // Status.Inactive (默认值)TryParse
Section titled “TryParse”尝试将字符串转为枚举值。
public static bool TryParse<TEnum>(this string value, out TEnum result, bool ignoreCase = true) where TEnum : struct, Enum示例:
enum Status { Active, Inactive }
if ("Active".TryParse<Status>(out var status)){ Console.WriteLine(status); // Status.Active}ParseExact
Section titled “ParseExact”字符串转为枚举值,转换失败抛出异常。
public static TEnum ParseExact<TEnum>(this string value, bool ignoreCase = true) where TEnum : struct, Enum异常:
ArgumentException: 当字符串无法解析为枚举值时抛出
示例:
enum Status { Active, Inactive }
var status = "Active".ParseExact<Status>(); // Status.Activevar status2 = "invalid".ParseExact<Status>(); // 抛出 ArgumentException4. 数值转枚举
Section titled “4. 数值转枚举”ToEnum (int)
Section titled “ToEnum (int)”int 转为枚举值,转换失败返回默认值。
public static TEnum ToEnum<TEnum>(this int value, TEnum defaultValue = default) where TEnum : struct, Enum示例:
enum Status { Active = 1, Inactive = 2 }
var status = 1.ToEnum<Status>(); // Status.Activevar status2 = 999.ToEnum(Status.Inactive); // Status.Inactive (默认值)ToEnum (long)
Section titled “ToEnum (long)”long 转为枚举值,转换失败返回默认值。
public static TEnum ToEnum<TEnum>(this long value, TEnum defaultValue = default) where TEnum : struct, EnumToEnum (byte)
Section titled “ToEnum (byte)”byte 转为枚举值,转换失败返回默认值。
public static TEnum ToEnum<TEnum>(this byte value, TEnum defaultValue = default) where TEnum : struct, EnumToEnum (short)
Section titled “ToEnum (short)”short 转为枚举值,转换失败返回默认值。
public static TEnum ToEnum<TEnum>(this short value, TEnum defaultValue = default) where TEnum : struct, EnumTryToEnum (int)
Section titled “TryToEnum (int)”尝试将 int 转为枚举值。
public static bool TryToEnum<TEnum>(this int value, out TEnum result) where TEnum : struct, EnumTryToEnum (long)
Section titled “TryToEnum (long)”尝试将 long 转为枚举值。
public static bool TryToEnum<TEnum>(this long value, out TEnum result) where TEnum : struct, Enum5. 描述特性
Section titled “5. 描述特性”GetDescription
Section titled “GetDescription”枚举值转为描述(DescriptionAttribute),无描述则返回名称。
public static string GetDescription<TEnum>(this TEnum value) where TEnum : struct, Enum示例:
enum Status{ [Description("激活状态")] Active = 1, [Description("停用状态")] Inactive = 2}
var status = Status.Active;var desc = status.GetDescription(); // "激活状态"FromDescription
Section titled “FromDescription”根据描述获取枚举值(DescriptionAttribute),找不到则返回默认值。
public static TEnum FromDescription<TEnum>(this string description, TEnum defaultValue = default) where TEnum : struct, Enum示例:
enum Status{ [Description("激活状态")] Active = 1, [Description("停用状态")] Inactive = 2}
var status = "激活状态".FromDescription<Status>(); // Status.ActiveGetDisplayName
Section titled “GetDisplayName”获取枚举值的显示名称(DisplayAttribute.Name),无特性则返回枚举名称。
public static string GetDisplayName<TEnum>(this TEnum value) where TEnum : struct, EnumGetDisplayDescription
Section titled “GetDisplayDescription”获取枚举值的显示描述(DisplayAttribute.Description),无特性则返回枚举名称。
public static string GetDisplayDescription<TEnum>(this TEnum value) where TEnum : struct, EnumGetAttribute
Section titled “GetAttribute”获取枚举值的指定特性。
public static TAttribute GetAttribute<TEnum, TAttribute>(this TEnum value) where TEnum : struct, Enum where TAttribute : AttributeGetAttributes
Section titled “GetAttributes”获取枚举值的所有指定特性。
public static IEnumerable<TAttribute> GetAttributes<TEnum, TAttribute>(this TEnum value) where TEnum : struct, Enum where TAttribute : Attribute6. 集合操作
Section titled “6. 集合操作”GetValues
Section titled “GetValues”获取枚举类型的所有值列表。
public static IEnumerable<TEnum> GetValues<TEnum>() where TEnum : struct, Enum示例:
enum Status { Active = 1, Inactive = 2 }
var values = EnumExtensions.GetValues<Status>();// [Status.Active, Status.Inactive]GetNames
Section titled “GetNames”获取枚举类型的所有名称列表。
public static IEnumerable<string> GetNames<TEnum>() where TEnum : struct, EnumGetValueDescriptionDict
Section titled “GetValueDescriptionDict”获取枚举类型的值与描述字典。
public static Dictionary<TEnum, string> GetValueDescriptionDict<TEnum>() where TEnum : struct, EnumGetNameDescriptionDict
Section titled “GetNameDescriptionDict”获取枚举类型的名称与描述字典。
public static Dictionary<string, string> GetNameDescriptionDict<TEnum>() where TEnum : struct, EnumGetUnderlyingType
Section titled “GetUnderlyingType”获取枚举类型的基础类型(如 int、byte)。
public static Type GetUnderlyingType<TEnum>() where TEnum : struct, Enum7. 标志操作
Section titled “7. 标志操作”HasFlag
Section titled “HasFlag”判断枚举值是否包含指定标志。
public static bool HasFlag<TEnum>(this TEnum value, TEnum flag) where TEnum : struct, Enum示例:
[Flags]enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4 }
var perm = Permissions.Read | Permissions.Write;var hasRead = perm.HasFlag(Permissions.Read); // truevar hasExecute = perm.HasFlag(Permissions.Execute); // falseAddFlag
Section titled “AddFlag”枚举值添加标志。
public static TEnum AddFlag<TEnum>(this TEnum value, TEnum flag) where TEnum : struct, Enum示例:
[Flags]enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4 }
var perm = Permissions.Read;perm = perm.AddFlag(Permissions.Write); // Permissions.Read | Permissions.WriteRemoveFlag
Section titled “RemoveFlag”枚举值移除标志。
public static TEnum RemoveFlag<TEnum>(this TEnum value, TEnum flag) where TEnum : struct, EnumToggleFlag
Section titled “ToggleFlag”枚举值切换标志(有则移除,无则添加)。
public static TEnum ToggleFlag<TEnum>(this TEnum value, TEnum flag) where TEnum : struct, EnumGetFlags
Section titled “GetFlags”获取枚举值包含的所有标志。
public static IEnumerable<TEnum> GetFlags<TEnum>(this TEnum value) where TEnum : struct, Enum示例:
[Flags]enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4 }
var perm = Permissions.Read | Permissions.Write | Permissions.Execute;var flags = perm.GetFlags();// [Permissions.Read, Permissions.Write, Permissions.Execute]8. 比较运算
Section titled “8. 比较运算”EqualsAny
Section titled “EqualsAny”判断枚举值是否等于任意一个指定值。
public static bool EqualsAny<TEnum>(this TEnum value, params TEnum[] values) where TEnum : struct, Enum示例:
enum Status { Active = 1, Inactive = 2, Pending = 3 }
var status = Status.Active;var result = status.EqualsAny(Status.Active, Status.Pending); // trueEqualsNone
Section titled “EqualsNone”判断枚举值是否不等于所有指定值。
public static bool EqualsNone<TEnum>(this TEnum value, params TEnum[] values) where TEnum : struct, Enum判断枚举值是否在指定集合中。
public static bool In<TEnum>(this TEnum value, IEnumerable<TEnum> values) where TEnum : struct, Enum- UI 显示 - 将枚举值转换为用户友好的描述文本显示
- 数据导入导出 - 在枚举值和字符串/数值之间相互转换
- 配置管理 - 获取和保存枚举类型的所有选项
- 权限控制 - 使用标志位枚举进行权限位运算
- API 接口 - 枚举值与外部系统数据格式转换
- 日志记录 - 记录枚举值的描述信息而非数值
- 数据绑定 - 为下拉列表等控件提供枚举值和描述的绑定源
- 业务逻辑 - 基于枚举描述进行业务规则判断
- 所有方法都是扩展方法,需要通过枚举实例来调用
GetDescription方法依赖 DescriptionAttribute 特性,未标记的枚举值返回名称Parse方法默认支持大小写不敏感的字符串解析ToEnum方法在转换失败时返回默认值,不会抛出异常- 标志位操作方法仅适用于带有 [Flags] 特性的枚举类型
FromDescription方法在找不到匹配描述时返回默认枚举值- 字典获取方法适用于数据绑定和枚举值描述管理
- 类型转换方法可以便捷地进行边界检查,提高代码健壮性
- 数值转换方法可以避免边界溢出,提高代码安全性和健壮性