2009-03-26 29 views
38

Escribir alguna documentación XML para una clase de ayudante de predicados. Pero no puedo entender que pueda consultar un Expression<Func<T, bool>> sin obtener un error de sintaxis. ¿Es posible? He intentado esto:¿Haciendo referencia a un tipo genérico de tipo genérico en la documentación C# XML?

<see cref="Expression{Func{T, bool}}"/> 

Pero conseguir una línea roja ondulada bajo {T, bool}}. Esto funciona sin embargo:

<see cref="Expression{TDelegate}"/> 

¿Alguien tiene una pista?


Actualización:

La respuesta que se le dio (y acepté) aparentemente funcionaba. Pero ahora he comenzado a recibir muchas advertencias sobre cosas que no puedo resolver. Tengo una clase llamada ExpressionBuilder<T> que funciona con Expression<Func<T, bool>> mucho. Así que, por supuesto, quiero referirme a eso en mis comentarios XML.

me han tratado las dos versiones que conozco:

<see cref="Expression&lt;Func&lt;T, Boolean&gt;&gt;"/> 
<see cref="Expression{Func{T, Boolean}}"/> 

Pero ni trabajo. (Y en la última, ReSharper pone un azul ondulada bajo {T,Boolean}} consigo dos advertencias bajo la compilación de todo el mundo lo he utilizado la cual dice que:

  1. comentario XML en 'bla bla' ha CREF Expresión atributo'> 'que no pudieron ser resueltos
  2. tipo declaración de parámetros no debe ser un identificador de un tipo. Véase también CS0081 error.

tienen el mismo problema en alguna parte he intentado hacer referencia a Range<Nullable<DateTime>> (Range<DateTime?> tampoco funcionó. Ambos con {} y con &lt; &gt;)

¿No soy yo supone que se refieren a este tipo de medicamentos genéricos?

+2

Estaba a punto de hacer la misma pregunta. Me tomó un tiempo encontrar este porque el título no es muy keyword-y. ¿Puedo sugerir, "¿Cómo me refiero a un tipo genérico de tipo genérico en la documentación XML de C#"? También puede agregar la etiqueta "genéricos". No tengo el representante para hacerlo yo mismo. –

+0

done =) – Svish

+0

funciona bien en VS2015, Reshaper 9 – Alex

Respuesta

37

Parece que no hay forma de referirse a un genérico genérico en la documentación XML, porque en realidad, no hay forma de referirse a un genérico de ningún tipo específico.

Lasse V de Karlsen answer hizo clic para mí:

Si se escribe <see cref="IEnumerable{Int32}" />, el compilador utiliza simplemente "Int32" como nombre de parámetro de tipo, no el argumento de tipo. Escribir <see cref="IEnumerable{HelloWorld}" /> funcionaría igual de bien. Esto tiene sentido porque no hay una página específica en MSDN para "IEnumerable of int" con la que su documentación pueda vincularse.

para documentar su clase correctamente, creo que tendría que escribir algo como:

<summary> 
Returns an <see cref="IEnumerable{T}" /> of <see cref="KeyValuePair{T,U}" /> 
of <see cref="String" />, <see cref="Int32" />. 
</summary> 

espero que les guste el texto.

+4

No, odio el texto, es por eso que hice esta pregunta. Oh, bueno ... tal vez en una versión futura de xml-doc: p – Svish

3
// Use "&lt;" instead of "<" symbol and "&gt;" instead of ">" symbol. 

// Sample: 

<see cref="Expression&lt;Func&lt;T, bool&gt;&gt;"/> 
+0

Oh mi ... eso es feo ... pero funciona =/¿Por qué acepta el {} para un tipo pero no más, tipo de? – Svish

+0

¿Estás seguro de esto? –

+1

¿Seguro sobre qué? Como dije, no obtengo una línea ondulada roja cuando uso 'Expression {TDelegate}' o por ejemplo 'List {String}'. De hecho, cuando escribo . Cuando escribo Lista y presiono enter, se autocompleta a List {T}. – Svish

12

¿A qué exactamente te gustaría vincular?

No hay tal cosa en la documentación como Expression<Func<T>>, por lo que, obviamente, un enlace para que eso no funcionaría.

puede vincular a Expression<TDelegate> debido a que existe.

En cuanto a lo que funciona o no, ninguno de los siguientes trabajos en Visual Studio 2008/.NET 3.5 para mí:

/// <see cref="Expression&lt;Func&lt;T&gt;&gt;"/>. 
/// <see cref="Expression{Func{T}}"/>. 

Pero esto funciona:

/// <see cref="Expression{T}"/>. 

lo que al parecer el tipo genérico parámetro no tiene que ser igual que el de la declaración.

+0

Así que no hay forma de referirse a un tipo genérico con un tipo específico ¿argumento? Como si tuviera una función que devolviera una lista >, solo podría decir que devolvió una lista ? – Svish

+0

O una lista ... que parece funcionar como debería ... – Svish

+2

Esto se debe a que "String" simplemente se usa como el nombre de tipo genérico. Pruebe List y funcionará igual de bien. –

0

Me encuentro con esto ahora, ya que tengo una función que devuelve List<List<byte>>. Sí, es feo, pero no lo escribí. Descargo de responsabilidad estándar, lo sé.

De todos modos, en VS 2017 con R # 2017.1 último, este comentario de documentación ...

<returns><see cref="List{List{Byte}}" /> of split frames</returns> 

... me da un error de sintaxis. Sin embargo, este ...

<returns><see><cref>List{List{byte}}</cref></see> of split frames</returns>

... no lo hace. Eeeenteresting.

¿Todavía feo? Sí.

Como ugly? Creo que es menos horrible que usar &lt; y &gt; yo mismo ....

0

No utilice un elemento de ver vacío (<see cref="..." />). En su lugar, ponga texto dentro del elemento see

<see cref="IEnumerable{T}">IEnumerable</see>&lt;<see cref="..."/>$gt; 
Cuestiones relacionadas