我想让 ToString() 在调试模式下为我控制的类显示。
如果这是当您将鼠标悬停在变量上时首先显示的内容,那就太好了。有这个属性吗?
我想让 ToString() 在调试模式下为我控制的类显示。
如果这是当您将鼠标悬停在变量上时首先显示的内容,那就太好了。有这个属性吗?
用
[System.Diagnostics.DebuggerDisplay("{ToString()}")]
测试:
[System.Diagnostics.DebuggerDisplay("{ToString()}")]
class MyClass
{
private string _foo = "This is the text that will be displayed at debugging"
public override string ToString()
{
return _foo;
}
}
现在,当您将鼠标悬停在变量上时,它将显示This is the text that will be displayed at debugging
.
有DebuggerDisplayAttribute
一个可以让你影响显示。它允许您编写相当复杂的表达式来生成调试输出,尽管不建议这样做。
但是,如果您已覆盖,ToString
则调试器会被记录为默认显示。也许代码有问题?
的输出ToString
应该是您在调试时看到的默认值。
可以使用DebuggerDisplay
Attribute 覆盖它(请参阅MSDN)。
我更喜欢覆盖该ToString
方法,因为它更容易且更通用,因为它在写入日志文件时也有帮助。
你看到什么输出?如果您获得类型名称,则会看到默认的ToString
.
我有一个类似的问题。我的班级有一个 ToString() 覆盖,但它仍然没有出现在 VS 中,这很奇怪。
将属性 [System.Diagnostics.DebuggerDisplay("{ToString()}")] 添加到类中会在 Visual Studio 调试器中显示异常,其中应该显示 ToString。原来我有一个错误,在我的实现中错误地使用了 string.Format()。这是一个有趣的行为——VS 会在出现异常时恢复到默认的 ToString。使用提到的属性强制显示显示方法的输出 - 有效或异常。这对于调试 ToString() 非常有用。否则,将这个属性显式添加到每个类是没有意义的,因为类默认情况下会打开它,除非出于某种原因想要关闭此行为。
您正在寻找的是DebuggerDisplayAttribute
:
http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute
使用上面的链接查看它是如何完成的,然后将其应用于您的类,使用该ToString()
方法来驱动显示的内容。我只使用过属性,不确定是否可以注入类。
在对象中重写 .ToString 如下:
public class MyObject
{
public int Property1{ get; set; }
public string Property2{ get; set; }
public string Property3 { get; set; }
public override string ToString()
{
return Property3;
}
}
这将返回 Property3 作为 ToString() 值
如果您使用的是 Visual Studio,您可以在 yourvariable.ToString() 行添加一个 watch @runtime,当它遇到断点时,它将显示在屏幕底部