Подтвердить что ты не робот

Ссылаясь на общий тип общего типа в документации на С# 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&lt;Func&lt;T, Boolean&gt;&gt;"/>
<see cref="Expression{Func{T, Boolean}}"/>

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

  • XML-комментарий к 'blah blah' имеет атрибут cref 'Expression > ', который не может быть разрешен
  • Объявление параметра типа должно быть идентификатором, а не типом. См. Также ошибку CS0081.

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

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

4b9b3361

Ответ 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&lt;Func&lt;T&gt;&gt;"/>.
/// <see cref="Expression{Func{T}}"/>.

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

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

так что, очевидно, общий параметр типа не имеет значения, указанного в объявлении.

Ответ 3

// Use "&lt;" instead of "<" symbol and "&gt;" instead of ">" symbol.

// Sample:

<see cref="Expression&lt;Func&lt;T, bool&gt;&gt;"/>

Ответ 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.

Еще некрасиво? Да.

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

Ответ 5

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

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