using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace System { public static class Enum2 { /// /// 获取枚举定义的所有常量 /// /// /// public static TEnum[] GetAll() where TEnum : Enum => (TEnum[])Enum.GetValues(typeof(TEnum)); /// /// 将 Flags 枚举进行拆分 /// /// /// /// public static IEnumerable FlagsSplit(TEnum resultant) where TEnum : Enum => GetAll().Where(x => resultant.HasFlag(x)).ToArray(); internal static TEnum ConvertToEnum(this TStruct value) { var parameter = Expression.Parameter(typeof(TStruct)); var dynamicMethod = Expression.Lambda>( Expression.Convert(parameter, typeof(TEnum)), parameter); return dynamicMethod.Compile()(value); } public static int ConvertToInt32(TEnum value) where TEnum : Enum => ConvertToEnum(value); } }