DebuggerDisplay en C#

Hoy os traigo un post cortito, pero no por ello menos interesante.

Cuando desarrollamos una aplicación, empleamos gran parte del tiempo depurando para ver qué pasa en las tripas de nuestro código. En muchas ocasiones, tenemos que estar inspeccionando objetos, navegando entre sus distintas propiedades, hasta llegar a evaluar la que buscamos. Es en estos casos donde es interesante que utilicemos el atributo DebuggerDisplay. Éste permite definir una representación personalizada de un objeto cuando se muestra en el depurador. Lo que nos facilita ver los valores relevantes de un objeto en lugar de tener que inspeccionar cada uno de sus miembros individuales.

La mejor manera de entenderlo es que veamos un ejemplo. Para ello he creado una aplicación muy sencilla, con una clase Person.

public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
    public Address Address { get; set; }
}

public class Address
{
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

En un momento dado, quiero evaluar el nombre, la ciudad y el país de un objeto de tipo Person, con lo que mi panel de inspección queda de la siguiente manera.

Como se puede apreciar, tengo que desplegar mi objeto person y, a su vez, inspeccionar su propiedad Address. Con lo que, si estamos inspeccionando varios objetos, puede que nuestro panel sea ingobernable.

Para solucionar este problema, podemos agregar el atributo DebuggerDisplay a la clase Person e indicarle qué información queremos que se muestre a la hora de depurar.

Siguiendo con el ejemplo anterior, quiero mostrar el nombre, la ciudad y el país, por lo que nuestro código quedaría de la siguiente manera:

[DebuggerDisplay("Name = {Name}; {Address}")]
public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public int Age { get; set; }
    public Address Address { get; set; }
}

[DebuggerDisplay("City = {City}; Country = {Country}")]
public class Address
{
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

Ahora, cuando depuramos nuestra aplicación, podremos ver la información que nos interesa de nuestro objeto sin necesidad de estar desplegando el contenido de las distintas propiedades.

En la imagen que se muestra a continuación, se ve cómo quedaría la inspección de dos objetos de tipo Person. Uno que tiene dirección y otro que no la tiene.

Con todo lo anterior, ya estamos en condiciones de utilizar DebuggerDisplay para ser algo más agiles en nuestras depuraciones.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.