Ссылаясь на общий тип общего типа в документации на С# XML?
Написание XML-документации для класса-помощника-предиката. Но я не могу понять, что могу ссылаться на Expression<Func<T, bool>>
, не получая синтаксическую ошибку. Возможно ли это? Я пробовал это:
<see cref="Expression{Func{T, bool}}"/>
Но я получаю красную squiggly строку под {T, bool}}
. Это работает, хотя:
<see cref="Expression{TDelegate}"/>
У кого есть ключ?
Update:
Ответ, который был дан (и я принял), казалось, действительно сработал. Но теперь я начал получать много предупреждений о том, что вещи не могут быть решены. У меня есть класс под названием ExpressionBuilder<T>
, который много работает с Expression<Func<T, bool>>
. Поэтому я, конечно, хочу сослаться на это в комментариях к XML.
Я пробовал обе версии, о которых я знаю:
<see cref="Expression<Func<T, Boolean>>"/>
<see cref="Expression{Func{T, Boolean}}"/>
Но никто не работает. (И на последнем, ReSharper помещает синюю squiggly под {T,Boolean}}
, я получаю два предупреждения под компиляцией всюду, я использовал это, который говорит, что:
- XML-комментарий к 'blah blah' имеет атрибут cref 'Expression > ', который не может быть разрешен
- Объявление параметра типа должно быть идентификатором, а не типом. См. Также ошибку CS0081.
У меня такая же проблема где-то я пытался ссылаться на Range<Nullable<DateTime>>
(Range<DateTime?>
тоже не работал. Оба с {} и с < >
)
Я не должен ссылаться на эти виды дженериков?
Ответы
Ответ 1
Кажется, что нет никакого способа ссылаться на общий родовой файл в документации XML, потому что на самом деле нет способа ссылаться на общий тип какого-либо определенного типа.
Lasse V Karlsen ответ заставлял меня нажимать на меня:
Если вы пишете <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>
Надеюсь, вам понравится текст.
Ответ 2
Что именно вам хотелось бы связать?
В документации нет такой вещи, как Expression<Func<T>>
, поэтому очевидно, что ссылка на нее не будет работать.
Вы можете ссылаться на Expression<TDelegate>
, потому что это существует.
Что касается того, что работает или нет, для меня нет ни одной из следующих работ в Visual Studio 2008/.NET 3.5:
/// <see cref="Expression<Func<T>>"/>.
/// <see cref="Expression{Func{T}}"/>.
Но это работает:
/// <see cref="Expression{T}"/>.
так что, очевидно, общий параметр типа не имеет значения, указанного в объявлении.
Ответ 3
// Use "<" instead of "<" symbol and ">" instead of ">" symbol.
// Sample:
<see cref="Expression<Func<T, bool>>"/>
Ответ 4
Теперь я сталкиваюсь с этим, так как у меня есть функция, которая возвращает 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.
Еще некрасиво? Да.
Как уродливый? Я считаю это менее ужасным, чем использование <
и >
себя....
Ответ 5
Не используйте пустой элемент see (<see cref="..." />
). Вместо этого поместите текст внутри элемента see
<see cref="IEnumerable{T}">IEnumerable</see><<see cref="..."/>$gt;