Здравствуйте, ybouts, Вы писали:
Y>Здравствуйте, dimchick, Вы писали:
Y>посмотри здесь
Да, такого аттрибута быть не может, потому как хардкодить строки не есть хорошо. Особенно когда пишешь приложение, которое поддерживает несколько языков.
Вобщем каждый пишет как ему удобно.
OE>foreach( object i in Enum.GetValues( typeof(SomeEnum) ) )
OE> Console.WriteLine( (new EnumTypeConverter(typeof(SomeEnum))).ConvertToString(i) );
Конвертер надо или один раз получить перед циклом или каждый раз, но не от типа, а от объекта ("i"). И получать его нужно не через new, а через TypeDescriptor.GetConverter():
var converter = TypeDescriptor.GetConverter(typeof(SomeEnum));
foreach( object i in Enum.GetValues( typeof(SomeEnum) ) )
Console.WriteLine( TypeDescriptor.GetConverter(i).ConvertToString(i) );
Если уж мы пометили значения в нашем enumе через DescriptionAttribute, то и добавить к enumу TypeConverter(typeof(EnumTypeConverter)) будет возможно.
OE>где:
OE> FieldInfo fi = _EnumType.GetField( Enum.GetName( _EnumType, value ) );
OE> DescriptionAttribute dna =
OE> ( DescriptionAttribute ) Attribute.GetCustomAttribute(
OE> fi, typeof( DescriptionAttribute ) );
Так же касается и ConvertFrom.
Тут не обрабатывается много специфичных для enum операций: значение может быть явно и не описано. Исключение в таком случае — это не совсем то, что ожидают пользователи.
var attributes = TypeDescriptor.GetAttributes(value);
var attribute = attributes[typeof(DescriptionAttribute)];
if(attribute != null && !String.IsNullOrEmpty(attribute.Description)) {
return attribute.Description;
}//ifreturn Convert.ToString(value);
Да и Flags не мешало бы как-то продумать. Базовый класс его обрабатывает.
Help will always be given at Hogwarts to those who ask for it.