如何在C#注释中转义字符?


112

今天我意识到,我不知道如何在C#注释中转义字符。我想记录一个通用的C#类,但是由于我不知道如何转义<and >字符,所以我无法写一个合适的例子。我必须使用&lt;&gt;吗?我不喜欢这种情况,因为我想简化实际文档中的注释,因此我不必生成某种代码文档即可阅读示例代码。


1
您可以显示示例注释吗?
BoltClock


1
@Mark:您是对的,但不仅是XML ...我试图写一个非XML的泛型示例,但它使用了“ <”和“>”。但是,两者的解决方案是相同的。
托马斯·詹森

鉴于C ++,Java,C#中模板的流行,... Microsoft使用半生的XML分隔符有什么可能的借口?通常缺乏清晰度和远见。
里克·奥谢

Answers:


141

如果您需要转义XML注释中的字符,则需要使用字符实体,因此<需要&lt;像问题中那样以进行转义。

转义的替代方法是使用CDATA节,以达到相同的效果。

如您所述,这将产生美观的文档,但阅读起来却令人恐惧。


19
仅供参考<&lt;>&gt;。例如,List&lt;string&gt; myStringList = new List&lt;string&gt;();
Arvo Bowen

@ArvoBowen以防万一有人遗漏了明显的东西,lt/分别gt代表“小于” /“大于”。
Lukas Juhrich '19

1
有趣的是,只需<逃避&lt;>就可以保持原样:List&lt;string> myStringList = new List&lt;string>();。至少这在智能感知中起作用。足够奇怪的是,CDATA 在智能感知中不起作用。我没有检查它在自动生成的文档中的外观。
Peter Huber

可以确认VS 2013不会CDATA在智能感知中呈现。&lt;使评论难以阅读。
Alex

52

在纯C#注释中,您可以使用任何字符(除非*/您以开头的注释/*,或者如果以开头的注释则是换行符//)。如果使用的是XML注释,则可以使用CDATA节来包含'<'和'>'字符。

请参阅此MSDN博客文章,以获取有关C#中XML注释的更多信息。


例如

/// <summary>
/// Here is how to use the class: <![CDATA[ <test>Data</test> ]]>
/// </summary>

12
如果您想生成漂亮的html文档,您可能是正确的,但是我对使VS中的intellisense技巧更正确感到更加有趣,为此,我似乎必须使用XML转义。但是+1作为替代。
Tomas Jansson 2010年

2
嗯,我的注释中难以理解的机器垃圾只会在花费大量时间来构建文档文件时才有用,而大量,大量,巨大(我提到过吗?)大多数用例正在阅读源代码中的注释(最好是一个接口) 。
里克·奥谢

19

您说:“我想使阅读实际文档中的注释变得容易”。我同意。

开发人员将大部分时间都用在代码中,而不用仔细阅读自动生成的文档。这些对第三方库(例如图表)非常有用,但不适用于我们使用所有代码的内部开发。我对MSFT尚未提出能够更好地为开发人员提供支持的解决方案感到震惊。我们具有动态扩展/折叠代码的区域...为什么不能在原位注释和处理过的XML注释之间或在原始文本和已处理的HTML注释之间没有就地注释呈现切换功能?似乎我的方法/类序言注释(红色文本,斜体等)中应该具有一些基本的HTML功能。IDE肯定可以起到一点HTML处理魔术的作用,以增强内联注释。

我的解决方案解决方案:我将'<'更改为“ {”,将'>“更改为”}“,这似乎涵盖了典型示例用法样式注释(包括您的特定示例),虽然不完美,但务实给定可读性问题(以及使用'<'时随之发生的IDE注释着色问题)


5
您的“解决方案破解”似乎比您想象的更正确。据此,编译器将花括号识别为尖括号并将其正确绑定
RubberDuck

7

C#XML注释是用XML编写的,因此您将使用常规的XML转义。

例如...

<summary>Here is an escaped &lt;token&gt;</summary>

5

我发现针对此问题的可行解决方案仅包括两个示例:一个带有转义符的XML注释中难以阅读的版本,以及另一个使用常规//注释的可读版本。

简单但有效。


0

比使用{...}更好的是使用≤...≥(Unicode中小于或等于符号,大于或等于符号,U2264和U2265)。看起来像带下划线的尖括号,但肯定还是尖括号!并且仅将几个字节添加到您的代码文件中。


0

甚至最好尝试U2280和U2281-只需从Unicode字符列表(数学运算符部分)进行复制和粘贴。


当Unicode运算符用于表示实际的数学运算符时,它是可以的;如果将它们用于碰巧在注释中的代码段(如List<int>),则效果不佳。考虑一下例如复制粘贴代码片段。
Palec

您能否在注释中提供如何使用此示例?从未真正使用过unicode字符
ClementWalter

1
如上所述复制并粘贴字符。
Paul Coulson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.