CSHARP_GEPARD Telegram 97
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



tgoop.com/csharp_gepard/97
Create:
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

View MORE
Open in Telegram


Telegram News

Date: |

There have been several contributions to the group with members posting voice notes of screaming, yelling, groaning, and wailing in different rhythms and pitches. Calling out the “degenerate” community or the crypto obsessives that engage in high-risk trading, Co-founder of NFT renting protocol Rentable World emiliano.eth shared this group on his Twitter. He wrote: “hey degen, are you stressed? Just let it out all out. Voice only tg channel for screaming”. Ng, who had pleaded not guilty to all charges, had been detained for more than 20 months. His channel was said to have contained around 120 messages and photos that incited others to vandalise pro-government shops and commit criminal damage targeting police stations. ZDNET RECOMMENDS With the sharp downturn in the crypto market, yelling has become a coping mechanism for many crypto traders. This screaming therapy became popular after the surge of Goblintown Ethereum NFTs at the end of May or early June. Here, holders made incoherent groaning sounds in late-night Twitter spaces. They also role-played as urine-loving Goblin creatures. Read now
from us


Telegram C# Heppard
FROM American