Heim > Artikel > Backend-Entwicklung > Beispielcode für die erweiterte Enum-Funktion
Aufgrund des inhärenten Fehlers im Englischen verwende ich beim Aufzählen immer Chinesisch, sodass ich die Kommentare nicht lesen muss, um die Bedeutung der Aufzählung zu verstehen. Heute habe ich den Blog-Beitrag gesehen, der
verwendet Attribute statt Chinesisch direkt als Attribute zu verwenden. Der Teil ist speziell für die zukünftige Verwendung extrahiert
/// <summary>/// 枚举帮助类/// </summary>public static class EnumTools {/// <summary>/// 获取当前枚举值的描述和排序/// </summary>/// <param name="value"></param>/// <returns>返回元组Tuple(string,int)</returns>public static Tuple<string,int> GetDescription(this Enum value) {int order = 0;string description = string.Empty; Type type = value.GetType();// 获取枚举FieldInfo fieldInfo = type.GetField(value.ToString());// 获取枚举自定义的特性DescriptionAttributeobject[] attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); DescriptionAttribute attr = (DescriptionAttribute)attrs.FirstOrDefault(a => a is DescriptionAttribute); description = fieldInfo.Name;if (attr != null) { order = attr.Order; description = attr.Name; }return new Tuple<string,int>(description,order); }/// <summary>/// 获取当前枚举的所有描述/// </summary>/// <returns></returns>public static List<KeyValuePair<int, string>> GetAll<T>() {return GetAll(typeof(T)); }/// <summary>/// 获取所有的枚举描述和值/// </summary>/// <param name="type"></param>/// <returns></returns>public static List<KeyValuePair<int, string>> GetAll(Type type) { List<EnumToolsModel> list = new List<EnumToolsModel>();// 循环枚举获取所有的Fieldsforeach (var field in type.GetFields()) {// 如果是枚举类型if (field.FieldType.IsEnum) {object tmp = field.GetValue(null); Enum enumValue = (Enum)tmp;int intValue = Convert.ToInt32(enumValue);var dec = enumValue.GetDescription();int order= dec.Item2;string showName = dec.Item1; // 获取描述和排序list.Add(new EnumToolsModel { Key = intValue, Name = showName, Order = order }); } }// 排序并转成KeyValue返回return list.OrderBy(i => i.Order).Select(i => new KeyValuePair<int, string>(i.Key, i.Name)).ToList(); }/// <summary>/// 枚举Model/// </summary> partial class EnumToolsModel {public int Order { get; set; }public string Name { get; set; }public int Key { get; set; } } }/// <summary>/// 枚举特性/// </summary>[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]public class DescriptionAttribute : Attribute {/// <summary>/// 排序/// </summary>public int Order { get; set; }/// <summary>/// 名称/// </summary>public string Name { get; set; }/// <summary>/// 定义描述名称/// </summary>/// <param name="name">名称</param>public DescriptionAttribute(string name) { Name = name; }/// <summary>/// 定义描述名称和排序/// </summary>/// <param name="name">名称</param>/// <param name="order">排序</param>public DescriptionAttribute(string name, int order) { Name = name; Order = order; } }
Ersetzen Sie den Out-Parameter im Original Text mit Gibt ein Tupel zurück. Da das Projekt in vs2015 entwickelt wurde, kann die c#7.0-Funktion nicht verwendet werden. Andernfalls wäre es besser, das Wertetupel in 7.0 zu verwenden. Leistung und Anzeigefreundlichkeit werden verbessert.
Das obige ist der detaillierte Inhalt vonBeispielcode für die erweiterte Enum-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!