为什么Visual Studio Debugger在显示中删除

本文关键字:显示 删除 Debugger Visual Studio 为什么 | 更新日期: 2023-09-27 18:03:19

我期望变量a在以下代码中的调试器显示为{11'n22},但它是{1122}:

class A
{
    public string Text;
    public override string ToString()
    {
        return this.Text;
    }
}
A a = new A();
a.Text = "11'n22";

调试器显示在变量窗口中:

display string of the object  "{1122}"    // why not "{11'n22}" ?
a.Text                        "11'n22"
a.ToString()                  "11'n22"

已在VS2012和VS2010上测试。我以前从未意识到这一点。有人知道为什么显示字符串省略了'n字符吗?

即使添加[DebuggerDisplay("Text")]也会得到相同的结果。

为什么Visual Studio Debugger在显示中删除

试着固定一下,你就会知道你需要什么了

似乎Visual Studio正在显示Object.ToString()删除所有的 whitespaces

但是如果你复制文本&将其粘贴到Notepad上,它显示了包含所有whitespaces的字符串。

Visual studio似乎以这种方式designed/coded !

'n 不省略 -它被求值。尝试在字符串的某个地方插入'",您将看到在helper窗口中出现双引号。类似地,如果您在即时窗口中输入a,您将看到以下内容:

a
{"11
22"}
    Text: "11'"'n''2'"2"

之所以省略,只是因为您正在查看的helper窗口将所有内容压缩到一行。

我认为这是求值的,因为这实际上是对象的摘要,所以它显示的是a.ToString()的打印值- Visual Studio(正确地)将'n解释为换行符。