18

我想让 ToString() 在调试模式下为我控制的类显示。

如果这是当您将鼠标悬停在变量上时首先显示的内容,那就太好了。有这个属性吗?

4

7 回答 7

30

[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.

于 2011-07-26T11:04:48.900 回答
9

DebuggerDisplayAttribute一个可以让你影响显示。它允许您编写相当复杂的表达式来生成调试输出,尽管不建议这样做

但是,如果您已覆盖,ToString则调试器会被记录为默认显示。也许代码有问题?

于 2011-07-26T11:05:19.247 回答
7

的输出ToString应该是您在调试时看到的默认值。

可以使用DebuggerDisplayAttribute 覆盖它(请参阅MSDN)。

我更喜欢覆盖该ToString方法,因为它更容易且更通用,因为它在写入日志文件时也有帮助。

你看到什么输出?如果您获得类型名称,则会看到默认的ToString.

于 2011-07-26T11:05:07.383 回答
5

我有一个类似的问题。我的班级有一个 ToString() 覆盖,但它仍然没有出现在 VS 中,这很奇怪。

将属性 [System.Diagnostics.DebuggerDisplay("{ToString()}")] 添加到类中会在 Visual Studio 调试器中显示异常,其中应该显示 ToString。原来我有一个错误,在我的实现中错误地使用了 string.Format()。这是一个有趣的行为——VS 会在出现异常时恢复到默认的 ToString。使用提到的属性强制显示显示方法的输出 - 有效或异常。这对于调试 ToString() 非常有用。否则,将这个属性显式添加到每个类是没有意义的,因为类默认情况下会打开它,除非出于某种原因想要关闭此行为。

于 2017-07-19T16:28:08.653 回答
4

您正在寻找的是DebuggerDisplayAttribute

http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute

使用上面的链接查看它是如何完成的,然后将其应用于您的类,使用该ToString()方法来驱动显示的内容。我只使用过属性,不确定是否可以注入类。

于 2011-07-26T11:04:45.253 回答
2

在对象中重写 .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() 值

于 2011-07-26T11:05:27.867 回答
0

如果您使用的是 Visual Studio,您可以在 yourvariable.ToString() 行添加一个 watch @runtime,当它遇到断点时,它将显示在屏幕底部

于 2011-07-26T11:05:46.513 回答