Comment échapper des caractères dans les commentaires c #?


112

J'ai réalisé aujourd'hui que je ne sais pas comment échapper aux caractères dans les commentaires pour C #. Je veux documenter une classe C # générique, mais je ne peux pas écrire un exemple correct car je ne sais pas comment échapper aux caractères <et >. Dois-je utiliser &lt;et &gt;? Je n'aime pas si c'est le cas car je veux faciliter la lecture du commentaire dans le document réel afin de ne pas avoir à générer une sorte de document de code pour pouvoir lire l'exemple de code.


1
Pouvez-vous montrer un exemple de commentaire?
BoltClock


1
@Mark: Vous avez raison, mais ce n'est pas seulement XML ... J'essayais d'écrire un exemple pour les génériques qui n'est pas XML mais qui utilise '<' et '>'. Mais la solution est la même pour les deux.
Tomas Jansson

Compte tenu de la popularité des modèles en C ++, Java, C # ... quelle excuse possible Microsoft a-t-il pour utiliser des délimiteurs XML à moitié cuits? Le manque habituel de clarté et de prévoyance.
Rick O'Shea

Réponses:


141

Si vous avez besoin d'échapper des caractères dans les commentaires XML, vous devez utiliser les entités de caractères, vous <devrez donc les échapper comme &lt;, comme dans votre question.

L'alternative à l'échappement consiste à utiliser des CDATAsections, au même effet.

Comme vous l'avez noté, cela produirait une belle documentation, mais un commentaire horrible à lire ...


19
Juste pour référence <serait &lt;et >serait &gt;. À titre d'exemple,List&lt;string&gt; myStringList = new List&lt;string&gt;();
Arvo Bowen

@ArvoBowen Juste au cas où quelqu'un manquerait l'évidence, lt/ signifie respectivement gt«moins de» / «plus grand que».
Lukas Juhrich

1
Fait intéressant, seulement <besoin de s'échapper avec &lt;, >peut rester comme il est: List&lt;string> myStringList = new List&lt;string>();. Au moins, cela fonctionne dans l'intellisense. Curieusement, CDATA ne fonctionne pas dans l'intellisense. Je n'ai pas vérifié à quoi il ressemble dans les documents générés automatiquement.
Peter Huber

Peut confirmer que VS 2013 ne rend pas CDATAdans intellisense. &lt;rend le commentaire difficile à lire.
Alex le

52

Dans les commentaires C # simples, vous pouvez utiliser n'importe quel caractère (sauf */si vous avez commencé le commentaire avec /*, ou le caractère de nouvelle ligne si vous avez commencé le commentaire avec //). Si vous utilisez des commentaires XML, vous pouvez utiliser une section CDATA pour inclure les caractères «<» et «>».

Consultez cet article de blog MSDN pour plus d'informations sur les commentaires XML en C #.


Par exemple

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

12
Vous avez probablement raison si vous voulez générer de beaux documents html, mais je suis plus intéressant pour obtenir les astuces intellisense dans VS correctes, et pour cela, il semble que je doive utiliser l'échappement XML. Mais +1 pour l'alternative.
Tomas Jansson

2
Hmm, les déchets de machine illisibles dans mes commentaires ne sont utiles que si nous prenons le temps de créer notre fichier de document lorsque la vaste, vaste, vaste majorité (ai-je mentionné la grande?) Des cas d'utilisation lit les commentaires dans la source (de préférence une interface) .
Rick O'Shea

19

Vous avez dit "Je veux faciliter la lecture du commentaire dans le document proprement dit". Je suis d'accord.

Les développeurs passent la majeure partie de leur vie dans le code , sans parcourir les documents générés automatiquement. Ceux-ci sont parfaits pour les bibliothèques tierces comme la création de graphiques, mais pas pour le développement en interne où nous travaillons avec tout le code. Je suis un peu choqué que MSFT n'ait pas proposé de solution qui supporte mieux les développeurs ici. Nous avons des régions qui développent / réduisent dynamiquement le code ... pourquoi ne pouvons-nous pas avoir une bascule de rendu de commentaire sur place (entre le texte brut et le commentaire XML traité ou entre le texte brut et le commentaire HTML traité)?. On dirait que je devrais avoir des capacités HTML élémentaires dans mes commentaires de prologue de méthode / classe (texte rouge, italique, etc.). Un IDE pourrait sûrement faire un peu de magie de traitement HTML pour animer les commentaires en ligne.

Ma solution de hack-of-a-solution : je change '<' en "{" et '> "en"} ". Cela semble me couvrir pour l'exemple typique de commentaire de style d'utilisation, y compris votre exemple spécifique. Imparfait, mais pragmatique étant donné le problème de lisibilité (et les problèmes de coloration des commentaires IDE qui s'ensuivent lors de l'utilisation de '<')


5
Votre "hack d'une solution" semble être plus correct que vous ne le pensez. Selon cela, le programme de reconnaissance du compilateur accolades en tant que crochets angulaires et les lie correctement .
RubberDuck

8

Les commentaires XML C # sont écrits en XML, vous utiliseriez donc un échappement XML normal.

Par exemple...

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

5

J'ai trouvé une solution vivable à ce problème qui consiste simplement à inclure deux exemples: une version difficile à lire dans les commentaires XML avec des caractères d'échappement et une autre version lisible utilisant des //commentaires conventionnels .

Simple mais efficace.


0

Mieux vaut utiliser {...}, c'est utiliser ≤ ... ≥ (signe inférieur ou égal, signe supérieur ou égal, U2264 et U2265 en Unicode). On dirait des équerres soulignées, mais toujours des équerres! Et n'ajoute que quelques octets à votre fichier de code.


0

Encore mieux, essayez U2280 et U2281 - il suffit de copier et coller à partir de la liste des caractères Unicode (section des opérateurs mathématiques).


Les opérateurs Unicode sont corrects lorsqu'ils sont utilisés pour représenter des opérateurs mathématiques réels, médiocres s'ils sont utilisés dans des extraits de code qui se trouvent dans un commentaire (par exemple List<int>). Pensez par exemple à copier-coller l'extrait de code.
Palec

pouvez-vous donner un exemple d'utilisation de ceci dans un commentaire? jamais utilisé de caractères Unicode
ClementWalter

1
Copiez et collez le caractère comme décrit ci-dessus.
Paul Coulson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.