Beim Schreiben von XML-Dokumentation können Sie verwenden <see cref="something">something</see>
, was natürlich funktioniert. Aber wie referenzieren Sie eine Klasse oder eine Methode mit generischen Typen?
public class FancyClass<T>
{
public string FancyMethod<K>(T value) { return "something fancy"; }
}
Wenn ich irgendwo eine XML-Dokumentation schreiben würde, wie würde ich auf die schicke Klasse verweisen? Wie kann ich auf a verweisen FancyClass<string>
? Was ist mit der Methode?
Zum Beispiel wollte ich in einer anderen Klasse den Benutzer wissen lassen, dass ich eine Instanz von zurückgeben werde FancyClass<int>
. Wie könnte ich dafür ein See-Cref-Ding machen?
1{T}.FancyMethod
1 {K} (T)"Übrigens war es in der MSDN-Dokumentation von .Net Framework 2.0 und 3.0 vorhanden , aber es verschwand in der Version 3.5
quelle
Int32
anstelle von verwendenint
,Single
anstelle vonfloat
usw. verwenden (Geben Sie diese Informationen hier ein, falls jemand anderes daraufTL; DR:
Während Sie auf eine Methode verweisen können , deren Signatur enthält
FancyClass<string>
(z. B. als Parametertyp), können Sie einen solchen geschlossenen generischen Typ nicht direkt referenzieren. Das zweite Beispiel umgeht diese Einschränkung. (Dies ist z. B. auf der MSDN-Referenzseite für die statischeSystem.String.Concat(IEnumerable<string>)
Methode zu sehen. ) ::Kommentarregeln für XML-Dokumentation
cref
:Umgeben Sie die generische Typparameterliste mit geschweiften Klammern
{}
anstatt mit<>
spitzen Klammern. Dies erspart Ihnen die Flucht vor letzterem, da -<
und>
denken Sie daran, dass Dokumentationskommentare XML sind!Wenn Sie ein Präfix einfügen (z. B.
T:
für Typen,M:
Methoden,P:
Eigenschaften,F:
Felder), führt der Compiler keine Validierung der Referenz durch, sondern kopiert einfach dencref
Attributwert direkt in die XML-Dokumentationsausgabe. Aus diesem Grund müssen Sie die spezielle "ID-Zeichenfolge" -Syntax verwenden , die in solchen Dateien gilt: Verwenden Sie immer vollqualifizierte Bezeichner und Backticks, um auf generische Typparameter zu verweisen (`n
auf Typen,``n
auf Methoden).Wenn Sie das Präfix weglassen , gelten reguläre Sprache Benennungsregeln: Sie Namensräume für die Drop kann es eine ist
using
Aussage, und Sie können die Sprache der Art als solche Schlüsselwörter verwenden ,int
stattSystem.Int32
. Außerdem überprüft der Compiler die Referenz auf Richtigkeit.Kommentar-
cref
Spickzettel zur XML-Dokumentation :quelle
T
Teil?<typeparamref name="T"/>
Keine der bisher gezeigten Antworten funktioniert vollständig für mich. ReSharper konvertiert das see-Tag nicht in einen Ctrl+ klickbaren Link (z ), es sei denn, es wird vollständig aufgelöst.
Wenn sich die Methode im OP in einem aufgerufenen Namespace befindet
Test
, lautet der vollständig aufgelöste Link zu der gezeigten Methode:<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
Wie Sie vielleicht herausfinden können, sollte es nur einen Backtick vor der Anzahl der Klassentypparameter geben, dann zwei Backticks vor der Anzahl der Methodentypparameter, dann sind die Parameter der nullindizierte Parameter mit der entsprechenden Anzahl von Backticks.
Wir können also sehen, dass
FancyClass
es einen Klassentypparameter,FancyMethod
einen Typparameter und ein Objekt von gibtFancyClass
Parametertyps an die Methode übergeben werden.Wie Sie in diesem Beispiel deutlicher sehen können:
Der Link wird:
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
Oder „Klasse mit zwei Typparametern , die ein Verfahren mit drei Typparametern aufweisen , wo die Verfahrensparameter sind
ClassType1
,ClassType2
,MethodType1
,MethodType2
,MethodType3
“Als zusätzliche Anmerkung fand ich dies nirgendwo dokumentiert und ich bin kein Genie, der Compiler hat mir das alles erzählt. Sie müssen lediglich ein Testprojekt erstellen, die XML-Dokumentation aktivieren , dann den Code einfügen, für den Sie einen Link erstellen möchten, und einen XML-Dokumentkommentar darauf setzen (
///
):Erstellen Sie dann Ihr Projekt, und die ausgegebene XML-Dokumentation enthält den Link im Element
doc
->members
->member
unter dem Attributname
:quelle
Weiter von den Antworten von Lasse und TBC:
wird auch QuickInfos korrekt bereitstellen, während ihre Version es mit den geschweiften Klammern rendert.
quelle
1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List
1 <T> - möchten Sie näher erläutern, wie man dies verwenden soll?quelle
quelle