Обобщенный вариант ToString() для всех типов
От: Аноним  
Дата: 09.07.09 10:24
Оценка:
Вот столкнулся со следующей проблемой. Допустим есть следующая иерархия классов

///тип использующийся в качестве полей класса
[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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.