Метод, который перебирает переданные в объектах свойства - PullRequest
2 голосов
/ 06 октября 2009

Попытка выяснить, как создать метод, который будет перебирать свойства объекта и выводить их (скажем, console.writeline на данный момент).

Возможно ли это с помощью отражения?

, например

public void OutputProperties(object o)
{

      // loop through all properties and output the values

}

Ответы [ 3 ]

4 голосов
/ 06 октября 2009

Попробуйте следующее

public void OutputProperties(object o) {
  if ( o == null ) { throw new ArgumentNullException(); }
  foreach ( var prop in o.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) ) {
    var value = prop.GetValue(o,null);
    Console.WriteLine("{0}={1}", prop.Name, value);
  }
}

Это выведет все свойства, объявленные для определенного типа. Он потерпит неудачу, если какое-либо из свойств выдает исключение при оценке.

2 голосов
/ 07 октября 2009

Альтернатива, использующая TypeDescriptor, позволяющая пользовательским объектным моделям показывать гибкие свойства во время выполнения (то есть то, что вы видите, может быть больше, чем просто то, что есть в классе, и может использовать пользовательские преобразователи типов для преобразования строк):

public static void OutputProperties(object obj)
{
    if (obj == null) throw new ArgumentNullException("obj");
    foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(obj))
    {
        object val = prop.GetValue(obj);
        string s = prop.Converter.ConvertToString(val);
        Console.WriteLine(prop.Name + ": " + s);
    }
}

Обратите внимание, что отражение - это реализация по умолчанию , но возможны и многие другие более интересные модели, через ICustomTypeDescriptor и TypeDescriptionProvider.

1 голос
/ 06 октября 2009

Да, вы можете использовать

foreach (var objProperty in o.GetType().GetProperties())
{
    Console.WriteLine(objProperty.Name + ": " + objProperty.GetValue(o, null));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...