Une alternative à l'aide TypeDescriptor
, ce qui permet des modèles d'objets personnalisés pour afficher les propriétés flexibles lors de l'exécution (à savoir ce que vous voyez peut être plus que ce qui est de la classe, et peut utiliser de type convertisseurs pour effectuer la conversion de chaîne) personnalisés:
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);
}
}
Notez que la réflexion est la valeur par défaut mise en œuvre - mais beaucoup d'autres modèles plus intéressants sont possibles, via ICustomTypeDescriptor
et TypeDescriptionProvider
.
n'utilisent-ils pas en interne la réflexion? – mrblah