Nota: Este post ha sido importado de mi blog de geeks.ms. Es posible que algo no se vea del todo "correctamente". En cualquier caso puedes acceder a la versión original aquí
Muy buenas! Acabo de leer el post de Luis Ruiz Pavon sobre sobre el sobreescribir .ToString() para mejorar la información del modo de depuración de VS.
Y ya puestos, para complementar su post, quería comentar un truco que no se si conoce mucha gente y que permite algo parecido sin necesidad de sobreescribir ToString (que se usa para otras cosas además de para mostrar la información en la ventana de depuración) y que es el uso del atributo DebuggerDisplay.
En este caso un ejemplo vale más que mil palabras:
- [DebuggerDisplay ("Product {Name} ({Code}): {Description}")]
- public class Product
- {
- public string Code { get; set; }
- public string Name { get; set; }
- public string Description { get; set; }
- public Product(string code, string name, string description)
- {
- Code = code;
- Name = name;
- Description = description;
- }
- public override string ToString()
- {
- return String.Format("Code – {0}", Code);
- }
- }
Y el resultado en la ventana de watches es:
Podemos conseguir cosas más interesantes utilizando las propiedades Name y TargetTypeName que modifican los valores de las columnas “Name” y “Type”. Así si uso el siguiente [DebuggerDisplay]:
- [DebuggerDisplay ("({Code}): {Description}", Name = "Product {Name}", Type ="Producto")]
Veo lo siguiente en la ventana de watches:
Y en la ventana de Locals veo, ahora, lo siguiente:
El uso de DebuggerDisplay tiene sus limitaciones si se compara con redefinir ToString() (este último es un método y puede contener código como el que mostraba Luis en su post para convertir a JSON), mientras que DebuggerDisplay tan solo puede generar una pequeña cadena a partir de las propiedades.
Si una clase tiene tanto ToString() redefinido como DebuggerDispay este último tiene precedencia para el depurador.
¡Y… eso es todo! 🙂
Saludos!