立即窗口中的换行符

57

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

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

因为有几个“something”,而且每个都很长,所以我想要看到它们。

something
something

遗憾的是,我看到

"something\nsomething"

我有没有办法获得我想要的内容?


我无法在我的VS2010上重现这种行为,我在即时窗口中得到了新行。 - Julien Lebosquain
我是否没有看到立即窗口设置? - Bob Kaufman
抱歉,我只是在输入变量的名称,它会提供正确的输出。使用 var.ToString() 我得到了与你相同的结果。 - Julien Lebosquain
@Julien - 我想我就这么做吧。但是还有其他一些不想处理的输出问题,今天我还没有准备好解决它们。没关系! - Bob Kaufman
@Julien 是正确的,如果你只输入 ?var,那么你就会得到正确结果。 - volody
@volody,在 ?var 的情况下,它仍然无法正常工作,因为结果将被包裹在 {} 中。 - JaredPar
2个回答

140

实际上有一种方法。您可以在立即窗口中使用格式说明符来更改显示格式。如果您有一个带有回车符和换行符的字符串("\r\n"),则可以在打印请求后跟随“不带引号”的格式说明符。

在立即窗口中键入:

?MyObj.ToString(),nq

\r\n 会在立即窗口中引起新的一行。

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


8
在Visual BASIC中需要使用问号符号,但在C#中基本上会被忽略。在BASIC中,“?”是控制台PRINT语句的速记符号。 - Bob Kaufman
2
哇哇哇,你刚刚又帮我省去了一轮在 XML 中将一百个 \" 改成 " 的麻烦。我无法形容你刚刚消除了我生活中多少小头疼。 - RobertB
该死!格式说明符显然无法在JavaScript即时窗口中工作。 - Pete Alvin
1
只是一个快速的提示,System.Diagnostics.Debug.WriteLine("Some\r\nEscaped\r\nString") 也可以作为解决方案;我一直认为这是因为立即窗口显示传递的实体(字符串的实体包括转义字符),而 WriteLine 实际上显示的是在当前上下文中评估字符串所产生的字符。 - tobriand
1
在Unity3D调试中似乎无法工作,当使用,nq选项时会显示“节点不受支持”。有人知道为什么吗? - StackHola
显示剩余2条评论

-4

很遗憾,没有这个功能。这是调试器API设计的一个副作用。

负责处理ToString()调用的组件是表达式求值器。它是大多数调试器窗口(监视、本地变量、立即等)的数据源。

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

这种技术对于本地变量和监视窗口非常有效。但在立即窗口中,显示多行值更有意义,但这种技术就不太合适了。不幸的是,表达式求值器不知道它的数据将在哪里显示的上下文,因此执行安全操作,即转义换行符。


2
我曾希望有一种“转义”配置选项,可以在中间窗口关闭。可惜并没有! - Bob Kaufman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接