当编写xml文档时,您可以使用<see cref="something">something</see>,这当然是有效的。但是如何使用泛型类型引用类或方法呢?

public class FancyClass<T>
{
  public string FancyMethod<K>(T value) { return "something fancy"; }
}

如果我要在某个地方编写xml文档,我该如何引用这个奇特的类呢?我怎么能引用一个幻想类<字符串>?方法呢?

例如,在一个不同的类中,我想让用户知道我将返回一个FancyClass<int>的实例。我怎么能做一个see cref的东西?


当前回答

/// Here we discuss the use of <typeparamref name="TYourExcellentType"/>.
/// <typeparam name="TYourExcellentType">Your exellent documentation</typeparam>

其他回答

/// Here we discuss the use of <typeparamref name="TYourExcellentType"/>.
/// <typeparam name="TYourExcellentType">Your exellent documentation</typeparam>

引用方法:

/// <see cref="FancyClass{T}.FancyMethod{K}(T)"/> for more information.
/// <see cref="FancyClass&lt;T>.FancyMethod&lt;K>(T)"/> for more information.

到目前为止,没有一个答案完全适合我。ReSharper不会将see标签转换为Ctrl+可点击的链接(例如),除非它完全解析。

如果OP中的方法在名为Test的命名空间中,则显示的方法的完全解析链接将是:

<参见 cref=“M:Test.FancyClass'1.FancyMethod''1('0)”/>

正如您可能能够计算出的那样,在类类型参数的数量之前应该只有一个反勾号,然后在方法类型参数的数量之前应该只有两个反勾号,然后这些参数是具有适当反勾号数量的零索引参数。

因此,我们可以看到FancyClass有一个类类型参数,FancyMethod有一个类型参数,FancyClass参数类型的对象将被传递给该方法。

在这个例子中,你可以更清楚地看到:

namespace Test
{
    public class FancyClass<A, B>
    {
        public void FancyMethod<C, D, E>(A a, B b, C c, D d, E e) { }
    }
}

链接变成:

M: Test.FancyClass ' 2. fancymethod ' ' 3 (0, 1, ' ' 0 ' ' 1 ' ' 2)

或者“有两个类型参数的类,它有一个有三个类型参数的方法,其中方法参数是ClassType1, ClassType2, MethodType1, MethodType2, MethodType3”


作为一个额外的说明,我没有发现这个记录在任何地方,我不是一个天才,编译器告诉我这一切。你所要做的就是创建一个测试项目,启用XML文档,然后插入你想要得到链接的代码,并在它上面加上一个XML文档注释(///):

namespace Test
{
    public class FancyClass<T>
    {
        ///
        public string FancyMethod<K>(T value) { return "something fancy"; }
    }

    public class Test
    {
        public static void Main(string[] args) { }
    }
}

然后构建您的项目,输出的XML文档包括属性名称下的doc->members->成员元素中的链接:

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Test</name>
    </assembly>
    <members>
        <member name="M:Test.FancyClass`1.FancyMethod``1(`0)">

        </member>
    </members>
</doc>

这是我在其他地方给出的答案。它也适用于类和方法。

我尝试了堆栈溢出的一切,以获得在几种情况下工作的结果。这里有一个对我有用的解决办法。(这对其他人来说是主观的。)

产生可点击的链接。 将鼠标悬停在标识符上是可行的。 正确生成.xml文件。 在智能感知中不产生错误。 适用于可空的泛型类型参数。 工作在Resharper和它的内置XML文档窗口(Resharper ->编辑->显示快速文档) 工作在XAM文档预览的Atomineer Pro Documentaion Visual Studio扩展。 使用泛型类型的泛型类型。

示例# 1

  /// <summary>
  ///  This instance field holds a reference to the
  ///  <see cref="ConcurrentDictionary{Decimal, Boolean}"/> as
  ///  <see cref="T:ConcurrentDictionary&lt;decimal, bool?&gt;"/> that contains
  ///  the list of all PDF's that are currently opened and being displayed.
  /// </summary>
  private ConcurrentDictionary<decimal, bool?> openedPdfs = default!;

  Note: 
    The ConcurrentDictionary{Decimal, Boolean} will correctly produce a
    clickable link of ConcurrentDictionary{TKey, TValue} on hovering while
    T:ConcurrentDictionary&lt;decimal, bool?&gt; makes sure the reader gets
    information on what type TKey and TValue are.

例2(使用“T”)

  /// <summary>
  ///  This instance field holds a reference to the
  ///  <see cref="ConcurrentDictionary{TKey, TValue}"/> as
  ///  <see cref="T:ConcurrentDictionary&lt;decimal, bool?&gt;"/> that contains
  ///  the list of all PDF's that are currently opened and being displayed.
  /// </summary>
  private ConcurrentDictionary<decimal, bool?> openedPdfs = default!;