C# 何时使用DebuggerDisplayAttribute
世界各地有哪些最佳实践?什么指导您决定何时以及如何将属性应用于代码?例如C# 何时使用DebuggerDisplayAttribute,c#,.net,visual-studio,debugging,debuggerdisplay,C#,.net,Visual Studio,Debugging,Debuggerdisplay,世界各地有哪些最佳实践?什么指导您决定何时以及如何将属性应用于代码?例如 您是否发现DebuggerDisplayAttribute对某些类型的对象(即自定义数据结构)比其他对象更有用 您是在公共类型、内部类型还是两者上定义它 您通常会将它添加到初始实现中,还是等待测试人员/用户请求它 什么时候定义DebuggerDisplayAttribute更好,什么时候重写.ToString()更有意义 您是否有关于在属性中公开多少数据的指导原则,或者对要包含的计算量有限制 是否有任何继承规则适用于基类,
DebuggerDisplayAttribute
对某些类型的对象(即自定义数据结构)比其他对象更有用DebuggerDisplayAttribute
更好,什么时候重写.ToString()
更有意义当我知道代码部分需要大量调试时,我经常使用它。在调试器中浏览对象时,它可以节省一些时间,尤其是在使用诸如
“{ChildCollection.Count}”
之类的表达式时。它可以让您快速了解正在查看的数据
我几乎总是把它放在最终会出现在集合中的类上,这样就可以很快地看到每个项,而不仅仅是一堆需要扩展的MyNamespace.MyClass元素
我的观点是,
ToString()
用于提供数据的最终用户表示。DebuggerDisplay面向开发人员,您可以决定显示元素ID、一些附加的内部/私有属性。这是主观的,我不想说有什么最佳实践,但是:
我想不出其他任何东西。
DebuggerDisplay
对于任何没有有意义的.ToString()
实现的类都有价值,但我个人没有看到任何人主动编写属性,直到需要它们
一般来说,链接到最佳实践看起来像是合理的建议;然而,我个人不赞成使用专用的
DebuggerDisplay()
方法——尽管它是私有的,但除了删除神奇字符串之外,它似乎对属性没有什么好处。没有DebuggerDisplay
属性的调试模式
[DebuggerDisplay("{Name,nq}")]//nq suffix means no quotes
public class Product {
public int Id { get; set; }
public string Name { get; set; }
//Other members of Northwind.Product
}
具有DebuggerDisplay
属性的调试模式
[DebuggerDisplay("{Name,nq}")]//nq suffix means no quotes
public class Product {
public int Id { get; set; }
public string Name { get; set; }
//Other members of Northwind.Product
}
虽然该属性很旧,但您应该观看掌声和讲述者的反应:)顺便说一句,如果您想看到更多调试器技巧,您应该在空闲时间观看完整的演示。这是自动的。你调试和咕哝调试信息,直到你厌倦了它,并写了一个。谢谢你的全面回答。Re:#3,我特别想到了其他人将通过调试器运行的公共API。在这些情况下,您是否避免显示对消费者不太有用的内部数据?@Scott-老实说,最大的成功是当您在调试器中有一组对象,并且希望快速找到感兴趣的对象时。在这种情况下,表示某种Id和名称的属性是最有用的——一旦开发人员确定了感兴趣的元素,他就可以打开它查看内部数据。尽管如此,我不会显式隐藏内部数据,因为调试器中没有真正私有的数据。