Imaginez une classe avec de nombreuses propriétés publiques. Pour une raison quelconque, il est impossible de refactoriser cette classe en sous-classes plus petites.
Je voudrais ajouter un remplacement ToString qui renvoie quelque chose dans le sens de:
Propriété 1: valeur de la propriété 1\n Propriété 2: valeur de la propriété 2\n ...
Y a-t-il un moyen de faire cela?
Je pense que vous pouvez utiliser un peu de réflexion ici. Jetez un oeil à Type.GetProperties()
.
private PropertyInfo[] _PropertyInfos = null;
public override string ToString()
{
if(_PropertyInfos == null)
_PropertyInfos = this.GetType().GetProperties();
var sb = new StringBuilder();
foreach (var info in _PropertyInfos)
{
var value = info.GetValue(this, null) ?? "(null)";
sb.AppendLine(info.Name + ": " + value.ToString());
}
return sb.ToString();
}
@ La réponse d'Oliver comme méthode d'extension (ce qui, je pense, lui convient bien)
public static string PropertyList(this object obj)
{
var props = obj.GetType().GetProperties();
var sb = new StringBuilder();
foreach (var p in props)
{
sb.AppendLine(p.Name + ": " + p.GetValue(obj, null));
}
return sb.ToString();
}
Vous pouvez le faire via la réflexion.
PropertyInfo[] properties = MyClass.GetType().GetProperties();
foreach(PropertyInfo prop in properties)
{
...
}
Vous pouvez vous inspirer d'une introspection d'état plus élaborée à partir du package StatePrinter classe introspector
Si vous avez accès au code de la classe dont vous avez besoin, vous pouvez simplement remplacer la méthode ToString()
. Sinon, vous pouvez utiliser Reflections pour lire les informations de l'objet Type:
typeof(YourClass).GetProperties()