Фильтровать содержимое унаследованных комментариев к параметрам

У меня есть комментарии, как это:

/// <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&gt;0]"/></param>
/// <param name="b"><inheritdoc select="node()[parent::node()[@name='b'] and @id&gt;0]"/></param>
public void InterfaceMethod(int a, int b) { }

Поскольку невозможно использовать выражения XPath в качестве фильтра, param элементы должны быть повторены. Выражение @id>0 (> необходимо экранировать) теперь выбирает только нужные абзацы.

Но как насчет другой разметки? Вложенные inheritdoc элемент будет выбирать содержание всех param узлы, поэтому мы должны добавить условие в атрибуте имени родителя.

Наконец, inheritdoc тег в пределах summary тег будет копировать резюме. Если мы разместили inheritdoc на корневом уровне, это снова выберет param, как описано здесь.

Другие вопросы по тегам