C# 我可以使用<;国际信用证>;引用另一个变量的XML摘要?

C# 我可以使用<;国际信用证>;引用另一个变量的XML摘要?,c#,visual-studio,documentation,inheritdoc,C#,Visual Studio,Documentation,Inheritdoc,当我为我的项目编写函数,更具体地说,是它们的XML文档注释时,我发现自己经常重复特定参数的注释。这有时会导致误导性文档(如复制粘贴通常所做的…) 这是我想到的一个简单的例子,它代表了真正的问题 /// <summary> /// The number that should be doubled /// </summary> private static float myNumber = 10f; /// <summary> /// Multiplies a

当我为我的项目编写函数,更具体地说,是它们的XML文档注释时,我发现自己经常重复特定参数的注释。这有时会导致误导性文档(如复制粘贴通常所做的…)

这是我想到的一个简单的例子,它代表了真正的问题

/// <summary>
/// The number that should be doubled
/// </summary>
private static float myNumber = 10f;

/// <summary>
/// Multiplies a number by 2
/// </summary>
/// <param name="number"><inheritdoc cref="myNumber"/></param>
/// <returns>The number multiplied by 2</returns>
private static float MultiplyByTwo(float number)
{
    return number * 2f;
}
//
///应该加倍的数字
/// 
私有静态浮点myNumber=10f;
/// 
///将一个数字乘以2
/// 
/// 
///这个数字乘以2
专用静态浮点乘法two(浮点数)
{
返回编号*2f;
}
在这一行中,我想要文本“应该加倍的数字”,但它没有显示出来。也许我不完全理解inheritdoc的用法

我出现的意思是这个。Visual Studio应在该框中显示
number
的文档:

这就是它的外观(无需复制粘贴文本):


那么,有没有一种方法可以在XML文档注释中引用不同的变量呢?

在Visual Studio 16.8.4中,我可以使用
路径
属性来实现这一点

/// <summary>
/// The number that should be doubled
/// </summary>
private static float myNumber = 10f;
        
/// <summary>
/// Multiplies a number by 2
/// </summary>
/// <param name="number"><inheritdoc cref="myNumber" path="/summary"/></param>
/// <returns></returns>
private static float MultiplyByTwo(float number)
{
    return number * 2f;
}
通常,当以这种方式对
TryExample
方法使用
时,它会显示它可能抛出
InvalidOperationException
。使用
path
属性,我对其进行了筛选,以便只继承与
exception
名称不匹配的节点

/
:匹配根节点

*
:匹配任何子节点

[
]
:匹配满足所包含谓词条件的任何节点

not()
:匹配括号内不满足表达式条件的任何节点

self::exception
:如果当前节点的名称为
exception
,则与该节点匹配

结果如下:


只能从基类、接口和类似方法继承XML注释。啊,这就是我担心的。所以除了复制粘贴没有别的方法了?
/// <summary>
/// This throws!
/// </summary>
/// <param name="param1">This is a parameter.</param>
/// <param name="param2">This is another parameter!</param>
/// <exception cref="InvalidOperationException"/>
public string ExampleThatCanThrow(int param1, float param2)
{
    throw new InvalidOperationException();
}

/// <summary>
/// This never throws!
/// </summary>
/// <inheritdoc cref="ExampleThatCanThrow(int, float)" path="/*[not(self::exception)]"/>
public bool TryExample(int param1, float param2, out string? result)
{
    result = "No throwing here!";
    return true;
}