DebuggerTypeProxy - Exibindo estados complexos no depurador
DebuggerTypeProxy - Exibindo estados complexos no depurador
Vamos começar com um atributo bem conhecido: DebuggerDisplay: DebuggerDisplay controla como um objeto é exibido na visualização da variável do depurador.
Aqui um pequeno exemplo:
[DebuggerDisplay("{Name}'s Father: {Father.Name}")]
public class Person
{
public DateTime Birthday { get; set; }
public string Name { get; set; }
public Person Father { get; set; }
public Person Mother { get; set; }
}
Se depurarmos nosso aplicativo e passarmos o mouse sobre um objeto Person, obteremos o seguinte:
O DebuggerTypeProxy permite que você escolha um proxy para o seu tipo. Isso significa que mostraremos o proxy em vez do objeto observado no momento. Vamos ver isso em ação:
public class PersonDebugView
{
private string hidden = "I am not visible";
private Person _person;
public PersonDebugView(Person person)
{
_person = person;
}
public string Parents => $"Father: {_person.Father.Name} / Mother: {_person.Mother.Name}";
public int Age => (DateTime.Now.Year - _person.Birthday.Year);
}
Nosso proxy usa a Pessoa como um argumento construtor. Ele tem duas propriedades e uma string privada. Isso é tudo. Vamos ver o que acontece quando anexamos o depurador:
Na visualização de depuração podemos ver apenas as propriedades do nosso proxy! E isso é toda a magia. Você pode usar os dois atributos juntos, conforme mostrado na imagem. Para esclarecer aqui como ambas as partes estão trabalhando juntas:
Se você quiser brincar sozinho, eu hospedei o código no github como essência.