Ссылка на универсальный тип универсального типа в документации C # XML? - PullRequest
41 голосов
/ 26 марта 2009

Написание XML-документации для вспомогательного класса предиката. Но я не могу понять, что могу ссылаться на Expression<Func<T, bool>> без получения синтаксической ошибки. Это вообще возможно? Я пробовал это:

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

Но я получаю красную волнистую линию под {T, bool}}. Это работает, хотя:

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

У кого-нибудь есть подсказка?


Обновление:

Ответ, который был дан (и я принял), казалось, сработал. Но теперь я начал получать много предупреждений о том, что вещи не в состоянии решить. У меня есть класс с именем ExpressionBuilder<T>, который много работает с Expression<Func<T, bool>>. Поэтому я, конечно, хочу сослаться на это в моих комментариях XML.

Я пробовал обе версии, о которых я знаю:

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

Но ни одна из них не работает. (И на последнем, ReSharper ставит синий волнистый знак под {T,Boolean}} Я получаю два предупреждения при компиляции везде, где я его использовал, который говорит, что:

  1. Комментарий XML к «бла-бла» имеет атрибут cref «Выражение>», который не может быть разрешен
  2. Объявление параметра типа должно быть идентификатором, а не типом. См. Также ошибка CS0081.

Возникла та же проблема, где я пытался сослаться на Range<Nullable<DateTime>> (Range<DateTime?> тоже не работал. И с {}, и с &lt; &gt;)

Разве я не должен ссылаться на эти виды дженериков?

Ответы [ 5 ]

42 голосов
/ 11 июня 2009

Кажется, нет никакого способа сослаться на универсальный тип в документации XML, потому что на самом деле нет никакого способа ссылаться на универсальный тип любого конкретного типа.

Ответ Лассе V Карлсена заставил меня щелкнуть:

Если вы пишете <see cref="IEnumerable{Int32}" />, компилятор просто использует «Int32» в качестве имени параметра типа, а не аргумента типа. Написание <see cref="IEnumerable{HelloWorld}" /> будет работать так же хорошо. Это имеет смысл, потому что в MSDN нет конкретной страницы для «IEnumerable of int», на которую может ссылаться ваша документация.

Чтобы правильно документировать свой класс, я думаю, вам нужно написать что-то вроде:

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

Надеюсь, вам нравится текст.

12 голосов
/ 28 апреля 2009

На что именно вы хотите сослаться?

В документации нет такого понятия, как Expression<Func<T>>, поэтому очевидно, что ссылка на него не будет работать.

Вы можете сделать ссылку на Expression<TDelegate>, потому что она существует.

Что касается того, что работает или нет, в Visual Studio 2008 / .NET 3.5 для меня не работает ни одно из следующих действий:

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

Но это работает:

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

так что, очевидно, параметр универсального типа не должен совпадать с параметром в объявлении.

3 голосов
/ 26 марта 2009
// Use "&lt;" instead of "<" symbol and "&gt;" instead of ">" symbol.

// Sample:

<see cref="Expression&lt;Func&lt;T, bool&gt;&gt;"/>
1 голос
/ 02 июня 2017

Я сейчас сталкиваюсь с этим, поскольку у меня есть функция, которая возвращает List<List<byte>>. Да, это уродливо, но я этого не написал. Стандартный отказ от ответственности, я знаю.

В любом случае, в VS 2017 с R # Ultimate 2017.1 этот комментарий к документу ...

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

... дает мне синтаксическую ошибку. Однако это ...

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

... нет. Eeeenteresting .

Все еще уродлив? Да.

Как безобразно? Я думаю, что это менее ужасно, чем использовать &lt; и &gt; сам ....

0 голосов
/ 07 декабря 2017

Не используйте пустой элемент see (<see cref="..." />). Вместо этого поместите текст внутри элемента see

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