Дженерики в выпуске XML-документации

Я пытаюсь включить фрагмент кода в XML-документацию моего класса, но компилятор жалуется, что элемент xml не закрыт! Вот чего я пытаюсь достичь

/// <summary>
/// Method documentation here...
/// </summary>
/// <remarks>
/// <para>
/// This class should be used as follow:
/// <br/>
/// ************** PROBLEM IN NEXT LINE ********************
/// <c> MyClass class = new MyClass<String>(); </c>
/// </para>
/// </remarks>
public class MyClass<T>{
....
}

Я попытался заменить фрагмент кода на /// <c> MyClass class = new MyClass{String}(); </c>

Кто-нибудь испытывал это раньше?

Спасибо за вашу помощь


person GETah    schedule 23.02.2012    source источник
comment
Об этом спросили и ответили на stackoverflow.com/questions/532166/   -  person kaj    schedule 23.02.2012
comment
@KAJ, поскольку OP обновил и исправил ошибку копирования / вставки, я согласен и проголосовал за закрытие как дубликат.   -  person Filburt    schedule 23.02.2012


Ответы (4)


В xml-документации вам необходимо заменить треугольные скобки фигурными скобками:

 /// <summary>
 /// Calls <see cref="DoSomething{T}"/>.
 /// </summary>
 public void CallsDoSomething()
 {

 }

 public void DoSomething<T>()
 {

 }

Причина, по которой вы в конечном итоге вынуждены это сделать, заключается в том, что это действительно неправильно сформированный xml, если вы разрешаете треугольные скобки вне разметки элемента.

Вы пытались заменить правильную.

person Rob Levine    schedule 23.02.2012
comment
да - вы тоже можете это сделать - хотя это делает саму документацию по коду менее читаемой, ИМХО. - person Rob Levine; 23.02.2012

Вы не закрыли элемент Remarks в 4-й строке, он может жаловаться на это, просто на неправильном номере строки.

Кроме того, с примерами, содержащими обобщения, он воспринимает List<string> как текстовый литерал List, за которым следует незакрытый string XML-элемент. Самый простой способ обойти это - сделать List &amp;lt;string&amp;gr;, который при синтаксическом анализе дает List<string>, не являясь элементом XML.

Команда компилятора C # добавила { и } в качестве замены для этого, так что вы можете просто сделать List{string}, и он будет преобразован в ‹>.

person AssembledGhost    schedule 23.02.2012
comment
Извините, это была проблема с копированием / вставкой. Просто добавил закрывающий тег для примечаний. - person GETah; 23.02.2012

Пара вещей:

  1. Чтобы убрать символы < и >, замените их на &lt; и &gt;.
  2. Закройте раздел XML <remarks> с помощью </remarks>
  3. Когда вы все же решили сослаться на универсальный шаблон в теге (например, <see ... />, <seealso ... /> и т. Д.), Вы должны сделать это следующим образом: <see cref="SomeMethod{T}(T value)" />. Никогда не указывайте конкретный тип в ссылке (то есть не делайте <see cref="SomeMethod{String}(String value)" />).

Вот фиксированная версия ваших комментариев XML:

/// <summary>
/// Method documentation here...
/// </summary>
/// <remarks>
/// <note type="implementsinfo">
///     <para>This class should be used as follow:</para>
///     <para><c>MyClass class = new MyClass&lt;string&lt;();</c></para>
/// </note>
/// </remarks>
public class MyClass<T>
{
    ....
}
person myermian    schedule 23.02.2012
comment
Спасибо за быстрый ответ. Я буду использовать {} вместо и - person GETah; 23.02.2012

Ваши <remarks> никогда не закрываются.

Также необходима замена угловых скоб, как вы уже пробовали.

person Filburt    schedule 23.02.2012
comment
Извините, это была проблема с копированием / вставкой. Просто добавил закрывающий тег для примечаний. - person GETah; 23.02.2012
comment
В этом случае KAJ прав, и использование фигурных скобок решит вашу проблему. - person Filburt; 23.02.2012