📜  从显示名称 c# 代码示例中获取枚举值

📅  最后修改于: 2022-03-11 14:48:38.178000             🧑  作者: Mango

代码示例1
// You have to create a helper to get what you need
public class Program
    {
        private static void Main(string[] args)
        {
            var name = "first_name";
            CustomFields customFields = EnumHelper.GetValueFromName(name);
        }
    }

    public enum CustomFields
    {
        [Display(Name = "first_name")]
        FirstName = 1,

        [Display(Name = "last_name")]
        LastName = 2,
    }

    public static class EnumHelper
    {
        public static T GetValueFromName(string name)
        {
            var type = typeof (T);
            if (!type.IsEnum) throw new InvalidOperationException();

            foreach (var field in type.GetFields())
            {
                var attribute = Attribute.GetCustomAttribute(field,
                    typeof (DisplayAttribute)) as DisplayAttribute;
                if (attribute != null)
                {
                    if (attribute.Name == name)
                    {
                        return (T) field.GetValue(null);
                    }
                }
                else
                {
                    if (field.Name == name)
                        return (T) field.GetValue(null);
                }
            }

            throw new ArgumentOutOfRangeException("name");
        }
    }