TGViewer
C# Heppard C# Heppard @csharp_gepard · 1.65K subscribers
Post #97 1.46K
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 должны быть максимально легковестными, а с другой, крайне хотелось бы видеть содержимое сущности.
  • 🔥 19
  • 👍 5
More from @csharp_gepard
  1. Mar 13, 2026Ozon Tech Community .NET Meetup 24 марта, лофт Casa Picassa, 19:00 Ищем способы бороться с…
  2. Jan 20, 2026Ещё одна история про память #отдых Судя по комментариям специалистов и ценам на RAM в мага…
  3. Nov 25, 2025FastEnum #скорость Иногда нам нужно не просто быстро, а очень быстро. В этот момент в дело…
  4. Nov 20, 2025UnsafeAccessor #скорость Иногда возникает странное желание изменять приватные поля в класс…
  5. Nov 17, 2025Latency numbers every programmer should know Я всё время теряю эти циферки, особенно когда…
  6. Oct 29, 2025Dictionary.TryGetValue #скорость Уж сколько лет прошло и, вроде, все это знают. Но, тем не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →