Wednesday, September 7, 2016

Custom Enum attributes in C#

public static class EnumExtensions
    {
        public static TAttribute GetAttribute(this Enum value)
            where TAttribute : Attribute
        {
            var type = value.GetType();
            var name = Enum.GetName(type, value);
            return type.GetField(name) // I prefer to get attributes this way
                .GetCustomAttributes(false)
                .OfType()
                .SingleOrDefault();
        }
    }

    public class AliasInfoAttribute : Attribute
    {
        internal AliasInfoAttribute(string alias)
        {
            this.Alias = alias;
        }
        public string Alias { get; private set; }
    }

    public enum EnumType
    {
        [AliasInfo("Alias1")]
        Emp=1, 


        [AliasInfo("Alias2")]
        Mngr= 2
    }


To Get Attributes

GetAlias(EnumType.Emp)


 public static string GetAlias(Enum value)
        {
            FieldInfo fi = value.GetType().GetField(value.ToString());

            AliasInfoAttribute[] attributes =
                (AliasInfoAttribute[])fi.GetCustomAttributes(
                typeof(AliasInfoAttribute),
                false);

            string desc = string.Empty;

            if (attributes != null &&
                attributes.Length > 0)
                return attributes[0].Alias;
            else
                return value.ToString();

        }


Happy Coding