Enum value from display name

前端 未结 2 903
梦如初夏
梦如初夏 2020-12-31 06:10

I am new with C# and I have some troubles with enum.

I have Enum defined like this:

public enum CustomFields
{
    [Display(Name = \"first_name\")]
          


        
相关标签:
2条回答
  • 2020-12-31 06:54

    Try the following.

    void Main()
    {   
        CustomFields value1 = GetEnumValue("first_name");
        CustomFields value2 = GetEnumValue("last_name");
    }
    
    static Dictionary<string, CustomFields> displayNameMapping;
    
    static CustomFields GetEnumValue(String displayName){
        if (displayNameMapping == null){
            var enumType = typeof(CustomFields);
            var displayAttributeType = typeof(DisplayAttribute);
            CustomFields? found = null;
    
            displayNameMapping = new Dictionary<string, CustomFields>();
            Enum.GetNames(enumType).ToList().ForEach(name=>{
                var member = enumType.GetMember(name).First();
                var displayAttrib = (DisplayAttribute)member.GetCustomAttributes(displayAttributeType, false).First();
                displayNameMapping.Add(displayAttrib.Name, (CustomFields)Enum.Parse(enumType, name));
            });
        }
    
        return displayNameMapping[displayName];
    }
    
    // Define other methods and classes here
    public enum CustomFields
    {
        [Display(Name = "first_name")]
        FirstName = 1,
    
        [Display(Name = "last_name")]
        LastName = 2,
    }
    
    0 讨论(0)
  • 2020-12-31 06:56

    You could use generics:

        public class Program
        {
            private static void Main(string[] args)
            {
                var name = "first_name";
                CustomFields customFields = EnumHelper<CustomFields>.GetValueFromName(name);
            }
        }
    
        public enum CustomFields
        {
            [Display(Name = "first_name")]
            FirstName = 1,
    
            [Display(Name = "last_name")]
            LastName = 2,
        }
    
        public static class EnumHelper<T>
        {
            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");
            }
        }
    
    0 讨论(0)
提交回复
热议问题