Фильтровать содержимое унаследованных комментариев к параметрам
У меня есть комментарии, как это:
/// <summary>some summary</summary>
/// <param name="a">
/// <para id="0">Comment 0</para>
/// <para id="1">Comment 1</para>
/// <para id="2">Comment 2</para>
/// </param>
/// <param name="b">
/// <para id="1">Comment 3</para>
/// <para id="0">Comment 4</para>
/// </param>
void InterfaceMethod(int a, int b);
Для метода реализации я хотел бы иметь ту же документацию, но без этих абзацев, имеющих id="0"
, с помощью inheritdoc
, Как я могу написать inheritdoc
элемент?
Необычное использование id
Атрибуты в этом контексте должны добавить гибкость, не привязываясь к порядку абзацев, как они появляются в документации.
1 ответ
Я нашел решение, но оно выглядит громоздким.
/// <summary><inheritdoc/></summary>
/// <param name="a"><inheritdoc select="node()[parent::node()[@name='a'] and @id>0]"/></param>
/// <param name="b"><inheritdoc select="node()[parent::node()[@name='b'] and @id>0]"/></param>
public void InterfaceMethod(int a, int b) { }
Поскольку невозможно использовать выражения XPath в качестве фильтра, param
элементы должны быть повторены. Выражение @id>0
(>
необходимо экранировать) теперь выбирает только нужные абзацы.
Но как насчет другой разметки? Вложенные inheritdoc
элемент будет выбирать содержание всех param
узлы, поэтому мы должны добавить условие в атрибуте имени родителя.
Наконец, inheritdoc
тег в пределах summary
тег будет копировать резюме. Если мы разместили inheritdoc
на корневом уровне, это снова выберет param
, как описано здесь.