Al escribir documentación xml puede usar <see cref="something">something</see>
, lo que funciona, por supuesto. Pero, ¿cómo hace referencia a una clase o un método con tipos genéricos?
public class FancyClass<T>
{
public string FancyMethod<K>(T value) { return "something fancy"; }
}
Si iba a escribir documentación xml en alguna parte, ¿cómo haría referencia a la clase elegante? ¿Cómo puedo hacer referencia a un FancyClass<string>
? ¿Qué hay del método?
Por ejemplo, en una clase diferente, quería que el usuario supiera que devolveré una instancia de FancyClass<int>
. ¿Cómo podría hacer una cosa ver cref para eso?
1{T}.FancyMethod
1 {K} (T)"Por cierto, estaba presente en la documentación de MSDN de .Net Framework 2.0 y 3.0 , pero desapareció en la versión 3.5
fuente
Int32
lugar deint
, enSingle
lugar defloat
etc. (Poner esta información aquí en caso de que alguien más se tropiece con esto)TL; DR:
Si bien puede hacer referencia a un método cuya firma incluye
FancyClass<string>
(por ejemplo, como un tipo de parámetro), no puede referencia a un tipo genérico cerrado directamente. El segundo ejemplo funciona alrededor de esa limitación. (Esto se ve, por ejemplo, en la página de referencia de MSDN para elSystem.String.Concat(IEnumerable<string>)
método estático ). :Comentario de documentación XML
cref
Reglas de :Rodee la lista de parámetros de tipo genérico con llaves en
{}
lugar de con<>
llaves angulares. Esto le evita escapar de esto último,<
y>
recuerde, ¡los comentarios de la documentación son XML!Si incluye un prefijo (como
T:
para tipos,M:
métodos,P:
propiedades,F:
campos), el compilador no realizará ninguna validación de la referencia, sino que simplemente copiará elcref
valor del atributo directamente a la salida XML de la documentación. Por esta razón, tendrá que usar la sintaxis especial de "cadena de ID" que se aplica en dichos archivos: use siempre identificadores totalmente calificados y use las teclas de retroceso para hacer referencia a parámetros de tipo genérico (`n
en tipos,``n
en métodos).Si omite el prefijo , se aplicarán las reglas de nomenclatura de idiomas habituales: puede colocar espacios de nombres para los que hay un
using
declaración y puede usar las palabras clave de tipo de idioma como enint
lugar deSystem.Int32
. Además, el compilador verificará que la referencia sea correcta.Documentación XML comentario
cref
hoja de trucos:fuente
T
parte?<typeparamref name="T"/>
Ninguna de las respuestas mostradas hasta ahora funciona completamente para mí. ReSharper no convertirá la etiqueta ver en un Ctrlenlace que pueda hacer clic con un clic (p. Ej. ) a menos que se resuelva por completo.
Si el método en el OP estuviera en un espacio de nombres llamado
Test
, el enlace completamente resuelto al método mostrado sería:<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>
Como es posible que pueda resolver, solo debe haber un retroceso antes del número de parámetros de tipo de clase, luego dos retrocesos antes del número de parámetros de tipo de método, luego los parámetros son el parámetro indexado a cero con el número apropiado de retrocesos.
Entonces podemos ver que
FancyClass
tiene un parámetro de tipo de clase,FancyMethod
tiene un parámetro de tipo y un objeto deFancyClass
parámetro de tipo y se pasará tipo de parámetro al método.Como puede ver más claramente en este ejemplo:
El enlace se convierte en:
M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)
O "Clase con dos parámetros de tipo, que tiene un método con tres parámetros de tipo, donde los parámetros del método son
ClassType1
,ClassType2
,MethodType1
,MethodType2
,MethodType3
"Como nota adicional, no encontré esto documentado en ninguna parte y no soy un genio, el compilador me contó todo esto. Todo lo que tiene que hacer es crear un proyecto de prueba, habilitar la documentación XML , luego insertar el código para el que desea elaborar un enlace y poner el comienzo de un comentario de documento XML en él (
///
):Luego construya su proyecto, y la documentación XML resultante incluye el enlace en el elemento
doc
->members
->member
debajo del atributoname
:fuente
Más allá de las respuestas de Lasse y TBC:
también proporcionará información sobre herramientas correctamente, mientras que su versión lo representa con las llaves.
fuente
1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List
1 <T> - ¿Le gustaría explicar cómo se debe usar esto?fuente
fuente