using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace ReZero.SuperAPI
{
public static class EnumAttributeExtractor
{
///
/// Gets the attribute values of the specified enum type.
///
/// The enum type.
/// A list of EnumAttributeValues.
public static List GetEnumAttributeValues() where T : Enum
{
var values = Enum.GetValues(typeof(T)).Cast().ToList();
List attributeValuesList = new List();
foreach (var value in values)
{
var enumType = typeof(T);
var fieldInfo = enumType.GetField(value.ToString());
var chineseTextAttribute = GetCustomAttribute(fieldInfo);
var englishTextAttribute = GetCustomAttribute(fieldInfo);
var textGroupAttribute = GetCustomAttribute(fieldInfo);
var attributeValues = new EnumAttributeValues
{
Value=Convert.ToInt64(value),
Text = App.Language == Language.CN ? chineseTextAttribute?.Text:englishTextAttribute?.Text,
TextGroup = App.Language == Language.CN ? textGroupAttribute?.cnText : textGroupAttribute?.enText
};
attributeValuesList.Add(attributeValues);
}
return attributeValuesList;
}
private static T GetCustomAttribute(FieldInfo fieldInfo) where T : Attribute
{
return (T)Attribute.GetCustomAttribute(fieldInfo, typeof(T));
}
///
/// Represents the values of an enum attribute.
///
public class EnumAttributeValues
{
///
/// Gets or sets the Chinese text.
///
public string? Text { get; set; }
///
/// Gets or sets the text group.
///
public string? TextGroup { get; set; }
///
/// Enum value
///
public long Value { get; set; }
}
}
}