DebuggerDisplayAttribute中",raw"的作用及完整格式参考咨询
DebuggerDisplayAttribute中
,raw的作用及格式字符串详解 一、,raw修饰符的具体作用
在[DebuggerDisplay("{ToString(),raw}")]标注里,,raw的核心作用是让调试器原样输出表达式的原始字符串结果,具体表现为:
- 取消调试器默认给字符串结果添加的外层双引号;
- 不对字符串内部的特殊字符(比如双引号、换行符、制表符)做转义处理;
- 直接返回表达式(这里是
ToString()方法)生成的原始字符串内容。
以ReadOnlyMemory<T>为例:如果是ReadOnlyMemory<char>类型,它的ToString()会直接返回内存段对应的字符内容。不加,raw时,调试器会自动给内容套上双引号,并转义内部特殊字符;加上,raw后,调试器就会直接显示字符本身,完全和ToString()返回的原始内容一致。
二、常见格式修饰符补充(含,nq)
除了,raw,DebuggerDisplay格式字符串还有几个常用但官方文档描述不足的修饰符:
,nq(no quotes):仅取消调试器自动添加的外层双引号,但仍会对字符串内部的特殊字符进行转义。和,raw的区别是:,nq只处理外层引号,内部转义保留;,raw则完全不做任何转义或添加引号的操作。,h/,x:将数值类型的表达式结果格式化为十六进制显示(仅对数值类型有效)。,d:将数值类型格式化为十进制(默认行为,可省略)。
三、关于格式字符串的权威参考现状
目前微软官方文档对DebuggerDisplayAttribute的格式修饰符描述确实不够完整,很多细节只能通过.NET Runtime的开源代码、调试器团队内部文档或社区实践总结出来。这些修饰符的行为可能会因调试器(比如Visual Studio、Rider)的不同略有差异,但,raw和,nq在主流.NET调试器中的表现基本统一。
内容的提问来源于stack exchange,提问作者Mike Nakis
相关产品推荐
相关产品推荐

