반응형
 public class EnumDescriptionTypeConverter : EnumConverter
    {
        public EnumDescriptionTypeConverter(Type type)
            : base(type)
        {
        }

        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return sourceType == typeof(string) || TypeDescriptor.GetConverter(typeof(Enum)).CanConvertFrom(context, sourceType);
        }

        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value is string)
                return GetEnumValue(EnumType, (string)value);
            if (value is Enum)
                return GetEnumDescription((Enum)value);
            return base.ConvertFrom(context, culture, value);
        }

        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            return value is Enum && destinationType == typeof(string)
                ? GetEnumDescription((Enum)value)
                : (value is string && destinationType == typeof(string)
                  ? GetEnumDescription(EnumType, (string)value)
                  : base.ConvertTo(context, culture, value, destinationType));
        }

        public static string GetEnumDescription(Enum value)
        {
            var fieldInfo = value.GetType().GetField(value.ToString());
            var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
            return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
        }

        public static string GetEnumDescription(Type value, string name)
        {
            var fieldInfo = value.GetField(name);
            var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
            return (attributes.Length > 0) ? attributes[0].Description : name;
        }

        public static object GetEnumValue(Type value, string description)
        {
            var fields = value.GetFields();
            foreach (var fieldInfo in fields)
            {
                var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
                if (attributes.Length > 0 && attributes[0].Description == description)
                    return fieldInfo.GetValue(fieldInfo.Name);
                if (fieldInfo.Name == description)
                    return fieldInfo.GetValue(fieldInfo.Name);
            }
            return description;
        }
       } 

[사용 방법]

public enum EVectorCharacter
{
  [Description("홍")]
  Hong,
}

'Programing > C# ' 카테고리의 다른 글

ColorComboBox 만들기  (0) 2012.06.21
Color이름으로 Color객체 얻어오기  (0) 2012.06.21
ComboBox in ListView (ListView에서 ComboBox띄우기)  (0) 2012.06.14
Convert Base64 To Image  (0) 2012.06.07
WindowForm에서 File DragAndDrop  (0) 2012.05.16

+ Recent posts