web-dev-qa-db-ja.com

C#XMLドキュメントでジェネリックタイプのジェネリックタイプを参照していますか?

述語ヘルパークラスのXMLドキュメントを作成します。しかし、構文エラーが発生せずにExpression<Func<T, bool>>を参照できることはわかりません。それも可能ですか?私はこれを試しました:

<see cref="Expression{Func{T, bool}}"/>

しかし、{T, bool}}の下に赤い波線が表示されます。ただし、これは機能します。

<see cref="Expression{TDelegate}"/>

誰か手がかりがありますか?


更新:

与えられた(そして私が受け入れた)答えはうまくいったようです。しかし今、私は問題が解決できないことについて多くの警告を受け始めました。 ExpressionBuilder<T>とよく連携するExpression<Func<T, bool>>というクラスがあります。ですからもちろん、XMLコメントでそれを参照したいと思います。

私が知っている両方のバージョンを試しました:

<see cref="Expression&lt;Func&lt;T, Boolean&gt;&gt;"/>
<see cref="Expression{Func{T, Boolean}}"/>

しかし、どちらも機能しません。 (そして最後の1つでは、ReSharperは{T,Boolean}}の下に青い波線を配置します。これを使用したすべての場所で、コンパイル中に2つの警告が表示されます。

  1. 'blah blah'に関するXMLコメントに、解決できなかったcref属性 'Expression>'があります
  2. 型パラメーター宣言は、型ではなく識別子でなければなりません。エラーCS0081も参照してください。

Range<Nullable<DateTime>>を参照しようとしたところに同じ問題があります(Range<DateTime?>も機能しませんでした。{}と&lt; &gt;の両方で)

私はこれらの種類のジェネリックを参照することになっていないのですか?

41
Svish

XMLドキュメントでジェネリックのジェネリックを参照する方法はないようです。実際には、特定のタイプのジェネリックを参照する方法がないためです。

Lasse V Karlsenの answer クリックしてくれました:

あなたが書くなら<see cref="IEnumerable{Int32}" />、コンパイラは、型引数ではなく、型パラメータ名として「Int32」を使用するだけです。書く<see cref="IEnumerable{HelloWorld}" />も同様に機能します。ドキュメントがリンクできる「IEnumerableofint」の特定のページがMSDNにないため、これは理にかなっています。

クラスを適切に文書化するには、次のようなものを書く必要があると思います。

<summary>
Returns an <see cref="IEnumerable{T}" /> of <see cref="KeyValuePair{T,U}" /> 
of <see cref="String" />, <see cref="Int32" />.
</summary>

私はあなたがテキストが好きだと思います。

42
Rory MacLeod

正確に何にリンクしますか?

ドキュメントにはExpression<Func<T>>のようなものはないので、明らかにそれへのリンクは機能しません。

Expression<TDelegate>が存在するため、リンクできます。

動作するかどうかについては、Visual Studio 2008/.NET3.5では次のどちらも動作しません。

/// <see cref="Expression&lt;Func&lt;T&gt;&gt;"/>.
/// <see cref="Expression{Func{T}}"/>.

しかし、これは機能します:

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

したがって、明らかに、ジェネリック型パラメーターは宣言内のパラメーターと同じである必要はありません。

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

// Sample:

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

List<List<byte>>を返す関数があるので、今これに遭遇しています。ええ、それは醜いですが、私はそれを書きませんでした。標準の免責事項、私は知っています。

とにかく、R#Ultimate2017.1を使用したVS2017では、このドキュメントコメント...

<returns><see cref="List{List{Byte}}" /> of split frames</returns>

...構文エラーが発生します。しかし、これは...

<returns><see><cref>List{List{byte}}</cref></see> of split frames</returns>

...ではない。 Eeeenteresting

まだ醜い?はい。

As醜い? &lt;&gt;を自分で使うよりも恐ろしいことではないと思います。

1
Mike Loux

空のsee要素を使用しないでください(<see cref="..." />)。代わりに、see要素内にテキストを配置します

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