【问题标题】:Newlines in the Immediate Window即时窗口中的换行符
【发布时间】:2011-02-21 13:40:04
【问题描述】:

使用 Visual Studio 2010 Professional,我有一个如下所示的 ToString() 方法:

public override string ToString()
{
    return "something" + "\n" + "something";
}

因为有几个“something”,每个都很长,我想看看

something
something

很遗憾,我看到了

"something\nsomething"

有没有办法得到我想要的?

【问题讨论】:

  • 我无法在我的 VS2010 上重现此行为,我在即时窗口中得到了新行。
  • 是否有我没有看到的即时窗口设置?
  • 抱歉,我只是输入了给出正确输出的 var 的名称,我得到的行为与您使用 var.ToString() 时的行为相同
  • @Julien - 我想我会这样做。但是,我今天还没有准备好解决其他不受欢迎的事情。没关系!
  • @Julien 是正确的,如果你只输入 ?var 就可以了

标签: visual-studio debugging visual-studio-2010 newline immediate-window


【解决方案1】:

其实是有办法的。您可以在即时窗口中使用格式说明符来更改显示格式。如果您有一个带有回车符和换行符的字符串 ("\r\n"),您可以在打印请求后面加上“无引号”格式说明符。

在即时窗口中输入:

?MyObj.ToString(),nq

\r\n 将在即时窗口中产生换行符。

有关格式说明符的更多信息,请参阅: http://msdn.microsoft.com/en-us/library/e514eeby.aspx

【讨论】:

  • 谢谢,很好用。为什么变量前面的问号?没有它似乎也能正常工作。
  • @Samik R - 问号在 Visual BASIC 中是必需的,在 C# 中基本上被忽略。在 BASIC 中,“?”是控制台 PRINT 语句的简写。
  • 感谢分享信息,对我很有帮助!
  • 哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇。我无法告诉你你刚刚从我的生活中消除了多少小头痛。
  • 就像一个快速的,System.Diagnostics.Debug.WriteLine("Some\r\nEscaped\r\nString") 也可以作为解决方案;我一直认为这是因为即时窗口正在显示传递的实体(并且字符串的实体包括转义字符)与 WriteLine 实际上显示的是在当前上下文中评估字符串所产生的字符......
【解决方案2】:

不幸的是,没有。这里发生的是调试器 API 设计的产物。

负责处理ToString() 调用的组件是表达式求值器。它是大多数调试器窗口(watch、locals、immediate 等)的数据源。

除了当前窗口之外的每个窗口,值都显示在一行上。在单行上显示多行字符串没有多大意义。因此,表达式求值器通过将换行符转义为可显示的版本,使字符串更易于显示。

这种技术非常适合本地人和观察窗口。但是在显示多行值更有意义的即时窗口中,它的意义要小得多。不幸的是,表达式评估器不知道它的数据将显示在哪里的上下文,因此执行了安全操作,即转义换行符。

【讨论】:

  • 我希望有某种“转义”配置选项可以为中间窗口关闭。唉,没有!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多