Альтернатива, использующая 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
.