4

我可以像这样引用泛型类型/方法定义:

/// <summary>
/// Takes a <see cref="Func{T}"/>.
/// </summary>
public void Method<T>(Func<T> func) { }

但是,这不起作用:

/// <summary>
/// Takes a <see cref="Func{Int32}"/>.
/// </summary>
public void Method(Func<int> func) { }

ReSharper/生成的帮助文件说Func<TResult>

4

1 回答 1

1

在第一个示例中,您将cref属性的类型指定为 type: Func<T>。这与命名空间中的类型完全匹配System。我们需要为该类型创建一个指向文档的链接:Func<TResult>. 它很容易找到并链接到。请注意,这会产生一个指向一种类型的链接。

在第二个示例中,当您查找 typeFunc<Int32>时,它​​实际上并不是带有您可以指向的文档的类型。命名空间中的类型System是通用的,并带有一个参数。您可能不认为它是完全匹配的,但解析器会假设Int32您正在使用类型参数的名称,并且您希望指向它可以在System命名空间中轻松找到的类型。同样,这会生成一个指向您实际上可以在 System 命名空间中找到的一种类型的链接。

您可能想要创建一个使用两个指向两种类型的链接的引用,就像在Enumerable.Sum参考页面上所做的那样。对于这种方法,

public static int Sum<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource,int> selector
)

他们使用两个链接记录了参数选择:

类型:System.Func <TSource, Int32 >

在这里,它们引用了两种类型,而不是一种。其中一个链接看起来像是对委托组的引用System.Func(这又不是我们可以指向的具有文档的类型),但它实际上指向System.Func<T,TResult>委托的文档。另一个链接是System.Int32.

如果你变得更正式,你可以这样做。xml通过编译器验证,如果使用则不变

<see cref="T:System.Func{T:System.Int32}"/>

但是,我不知道这将如何在大多数模板中显示。它用于记录实体框架源代码。对于示例(显示效果不佳),您可以查看System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder 命名空间的文档。

我也看到它完成了

<see cref="T:System.Func &lt; T:System.Int32 &gt;"/>

同样,忽略模板以很好地显示它并且只通过 xml,这会产生通过编译器语法验证的标记。当您将其从 xml 转换为创建实际文档时,您可能会有更好的运气。

于 2015-10-24T02:46:37.357 回答