【发布时间】:2018-10-29 21:32:43
【问题描述】:
在我的程序中,我在这里写了一个List 的子类,称为BetterList。
调试器显示如下:
我可以覆盖某些内容以使BetterList 正确显示吗?
【问题讨论】:
在我的程序中,我在这里写了一个List 的子类,称为BetterList。
调试器显示如下:
我可以覆盖某些内容以使BetterList 正确显示吗?
【问题讨论】:
对于这种情况,您应该使用DebuggerDisplayAttribute。
查看Enhancing Debugging with the Debugger Display Attribute 文档以获取有关它的更多详细信息以及一些具有更丰富功能的类似属性。
【讨论】:
假设新类公开了一个Count 属性,您可以在类中添加DebuggerDisplayAttribute 以在调试时显示该属性
[DebuggerDisplay("Count = {Count}")]
public class BetterList: List<SomeType> {
//...
public int Count { get; }
}
对于更复杂的显示场景请查看Using DebuggerTypeProxy Attribute
DebuggerTypeProxyAttribute为类型指定代理或替代,并更改类型在调试器窗口中的显示方式。当您查看具有代理的变量时,代理代表显示中的原始类型。调试器变量窗口仅显示代理类型的公共成员。不显示私人成员。
[DebuggerDisplay("Count = {Count}")]
[DebuggerTypeProxy(typeof(BetterListDebuggerView))]
public class BetterList: List<SomeType> {
//...
public int Count { get; }
internal class BetterListDebuggerView {
private BetterList list;
public BetterListDebuggerView(BetterList list) {
this.list = list;
}
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public SomeType[] Items {
get {
return list.ToArray();
}
}
}
}
【讨论】: