При написании XML-документации вы можете использовать <see cref="something">something</see>
, что, конечно, работает. Но как вы ссылаетесь на класс или метод с универсальными типами?
public class FancyClass<T>
{
public string FancyMethod<K>(T value) { return "something fancy"; }
}
Если бы я собирался написать где-нибудь документацию xml, как бы я сослался на причудливый класс? как я могу сослаться наFancyClass<string>
? Как насчет метода?
Например, в другом классе я хотел, чтобы пользователь знал, что я верну экземпляр FancyClass<int>
. Как я могу сделать что-нибудь для этого?
1{T}.FancyMethod
1 {K} (T)»Кстати, он присутствовал в документации MSDN .Net Framework 2.0 и 3.0 , но исчез в версии 3.5
источник
Int32
вместоint
,Single
вместо,float
и т. Д. (Поместить эту информацию здесь на случай, если кто-то ещеTL; DR:
Хотя вы можете ссылаться на метод, чья сигнатура включает
FancyClass<string>
(например, в качестве типа параметра), вы не можете напрямую ссылаться на такой закрытый универсальный тип. Второй пример работает вокруг этого ограничения. (Это видно, например, на странице ссылки MSDN для статическогоSystem.String.Concat(IEnumerable<string>)
метода ). :cref
Правила комментирования XML-документации :Обведите список параметров универсального типа фигурными скобками,
{}
а не<>
угловыми скобками. Это избавит вас от возможности избежать последнего, поскольку<
и>
- помните, комментарии к документации в формате XML!Если вы включите префикс (например,
T:
для типов,M:
для методов,P:
для свойств,F:
для полей), компилятор не будет выполнять проверку ссылки, а просто скопируетcref
значение атрибута прямо в вывод XML документации. По этой причине вам придется использовать специальный синтаксис «строка идентификатора», который применяется в таких файлах: всегда использовать полностью определенные идентификаторы и использовать обратные ссылки для ссылки на параметры универсального типа (`n
для типов,``n
для методов).Если вы пропустите префикс , применяются обычные правила именования языков: вы можете отбросить пространства имен, для которых есть
using
оператор, и можете использовать ключевые слова типа языка, напримерint
вместоSystem.Int32
. Также компилятор проверит ссылку на правильность.Шпаргалка с комментариями к документации XML
cref
:источник
T
часть?<typeparamref name="T"/>
Ни один из приведенных ответов не работает для меня полностью. ReSharper не будет преобразовывать тег see в Ctrlссылку + click -able (например, ), пока он полностью не разрешится.
Если бы метод в OP находился в вызванном пространстве имен
Test
, полностью разрешенная ссылка на показанный метод была бы:<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
Как вы можете выяснить, перед числом параметров типа класса должен быть только один обратный трюк, затем два обратных тика перед числом параметров типа метода, тогда параметры являются индексированным параметром с нулевым индексом и соответствующим количеством обратных токов.
Таким образом, мы можем видеть, что
FancyClass
имеет один параметр типа класса,FancyMethod
имеет один параметр типа и объектFancyClass
параметра будет передан методу.Как вы можете видеть более ясно в этом примере:
Ссылка становится:
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
Или «Класс с параметрами два типа , который имеет метод с тремя параметрами типа , где параметры метода
ClassType1
,ClassType2
,MethodType1
,MethodType2
,MethodType3
»Как дополнительное примечание, я нигде не нашел этого документированного, и я не гений, компилятор сказал мне все это. Все, что вам нужно сделать, это создать тестовый проект, включить XML-документацию , затем вставить код, для которого вы хотите разработать ссылку, и поместить в него начало XML-документа (
///
):Затем создайте свой проект, и выводимая документация XML будет содержать ссылку в элементе
doc
->members
->member
под атрибутомname
:источник
Далее из ответов Лассе и TBC:
также будет правильно отображать всплывающие подсказки, в то время как их версия отображает фигурные скобки.
источник
1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List
1 <T> - не могли бы вы уточнить, как это можно использовать?источник
источник