using System.ComponentModel.DataAnnotations; using System.Reflection; using Yi.Framework.DigitalCollectibles.Domain.Shared.Attributes; namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Consts; /// /// 稀有度枚举 /// public enum RarityEnum { [Display(Name = "普通")][Probability(0.6f)] Ordinary = 0, [Display(Name = "高级")][Probability(0.25f)] Senior = 1, [Display(Name = "稀有")][Probability(0.1f)] Rare = 2, [Display(Name = "珍品")][Probability(0.04f)] Gem = 3, [Display(Name = "传说")][Probability(0.01f)] Legend = 4 } public static class RarityEnumExtensions { public static string GetRarityName(this RarityEnum enumValue) { // 获取枚举类型 Type type = enumValue.GetType(); // 获取当前枚举值的 FieldInfo FieldInfo fieldInfo = type.GetField(enumValue.ToString()); // 获取 Display 特性 DisplayAttribute displayAttribute = fieldInfo .GetCustomAttributes(typeof(DisplayAttribute), false) .FirstOrDefault() as DisplayAttribute; // 返回名称,如果没有找到,则返回枚举值的名称 return displayAttribute?.Name ?? enumValue.ToString(); } private static T GetAttribute(RarityEnum rarity) where T : Attribute { var fieldInfo = typeof(RarityEnum).GetField(rarity.ToString()); var attribute = fieldInfo.GetCustomAttribute(); return attribute!; } public static decimal GetProbabilityValue(this RarityEnum rarity) { var attribute = GetAttribute(rarity); return attribute.Value.To(); } public static string GetDisplayValue(this RarityEnum rarity) { var display = GetAttribute(rarity); return display.Name!; } public static decimal[] GetProbabilityArray() { List probabilityList = new List(); foreach (var field in typeof(RarityEnum).GetFields()) { // 获取特性 var attribute = field.GetCustomAttribute(); if (attribute != null) { // 将特性值添加到列表 probabilityList.Add(attribute.Value.To()); } } return probabilityList.ToArray(); } }