tgoop.com/csharp_gepard/97
Create:
Last Update:
Last Update:
DebuggerTypeProxy #решение
Помимо удобного атрибута DebuggerDisplay для отображения в окне отладки текстового представления сущности, существует ещё один мощный атрибут - DebuggerTypeProxy.
Он предоставляет возможность создать совершенно другое представление сущности при отладке, а также добавить или исключить поля и свойства из отображения.
[DebuggerTypeProxy(typeof(UserProxy))]
[DebuggerDisplay("{Name} ({Email})")]
public sealed class User
{
public UserClaim[] Claims;
...
}
[DebuggerDisplay("{Name}")]
public sealed class UserClaim(string name)
{
public string Name = name;
}
internal sealed class UserProxy (User user)
{
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public UserClaim[] Claims => user.Claims;
}
Как можно заметить по картинке, отображение класса изменилось, предлагая возможность сразу взглянуть на claim'ы пользователя. Также, обратите внимание на атрибут
DebuggerBrowsable
, который позволяет заставить отладчик сразу отображать нужное содержимое, будто бы это коллекция.Подобный подход можно применить ещё круче. Например, когда сущность вообще не содержит данные для отображения, но мы можем эти данные каким-то достать.
Например, сущность Entity в популярной ECS вообще не содержит данных о её компонентах. Тем не менее, коллега их достаёт и предоставляет в отладке. Для случая ECS это очень удобно, поскольку, с одной стороны, Entity должны быть максимально легковестными, а с другой, крайне хотелось бы видеть содержимое сущности.
BY C# Heppard

Share with your friend now:
tgoop.com/csharp_gepard/97