Вот столкнулся со следующей проблемой. Допустим есть следующая иерархия классов
///тип использующийся в качестве полей класса
[MyAttribute( "Объект" )]
public class SomeObject
{
...
public ToString()
{
return "ЗначениеОбъекта";
}
}
///перечисление использующееся в качестве полей класса
[MyAttribute( "Множество" )]
public enum SomeEnum
{
[MyAttribute( "Значение1" )]
a,
[MyAttribute( "Значение2" )]
b,
[MyAttribute( "Значение3" )]
c
}
public class A : Base
{
public SomeObject FieldB;
}
public class B : Base
{
public SomeEnum FieldB;
}
/// Базовый класс, определяет метод для получения имя/значение для всех полей
public class Base
{
public Dictionary<string, string> GetValues()
{
}
}
собственно задача написать метод базового класса который вернет названия и значения публичных полей текущего объекта
Пишем :
Dictionary<string, string> dict = new Dictionary<string, string>();
FieldInfo[] object_fields = GetType().GetFields( BindingFlags.Public );
foreach (FieldInfo fi in object_fields)
{
string key = fi.GetValue(this).GetType().GetCustomAttributes(... /// короче достаем название из аттрибута, тут все понятно
string value = fi.GetValue( this ).ToString(); // а вот тут проблема, в случае с enum ToString() не вернет нужное значение
dict.Add( key, value )
}
Собственно тут и вопрос , каким образом реализовать универсальный ToString() для полей типа enum и обычных объектов.
С#2.0, .NET FW2.0.