我想在调试模式下让ToString()显示我控制下的类。
当你用鼠标悬停在一个变量上时,这是第一个出现的事情,这很好。这有属性吗?
答案 0 :(得分:25)
用
标记你的课程[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
。
答案 1 :(得分:7)
DebuggerDisplayAttribute
可让您影响显示效果。它允许您编写相当复杂的表达式来生成调试输出,尽管it is not recommended to do so。
但是,如果您已覆盖ToString
,则会记录调试器以默认显示该调试器。也许代码出了问题?
答案 2 :(得分:5)
ToString
的输出应该是您在调试时看到的默认值。
可以使用DebuggerDisplay
属性覆盖它(请参阅MSDN)。
我更喜欢覆盖ToString
方法,因为它更容易,更通用,因为它在写入日志文件时也有帮助。
你看到什么输出?如果您获得了类型名称,则会看到默认的ToString
。
答案 3 :(得分:4)
您要找的是DebuggerDisplayAttribute
:
http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute
使用上面的链接查看它是如何完成的,然后将其应用到您的班级,使用ToString()
方法来驱动显示的内容。我只使用过属性,不确定是否可以注入类。
答案 4 :(得分:2)
我有类似的问题。我的班级有一个ToString()覆盖,它仍然没有出现在VS中,这很奇怪。
将属性[System.Diagnostics.DebuggerDisplay(" {ToString()}")]添加到类中会在visual studio调试器中显示异常,其中应显示ToString。原来我在我的实现中错误地使用了string.Format()。 这是一个有趣的行为 - 如果出现异常,VS将恢复为默认的ToString。 使用上述属性会强制显示器显示方法的输出 - 有效或异常。这对于调试ToString()非常有用。否则,将此属性显式添加到每个类是没有意义的,因为默认情况下类会启用它,除非出于某种原因想要关闭此行为。
答案 5 :(得分:1)
在对象中覆盖.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()值
答案 6 :(得分:0)
如果你正在使用visual studio,你可以添加一个watch @ runtime和你的变量.ToString() 线,当它到达断点时,它将显示在屏幕的底部