在C#的XML注释中,我如何引用另一种方法的参数?

4
在MethodB的XML文档中,我想写一些类似于以下的内容:
/// <remarks>Before calling this method, call <see cref="MethodA"> passing zero as <paramef name="MethodA.MyParam"/> value.

MethodA的声明如下:

void MethodA(int MyParam)

这可行吗?目前,我必须以这种方式编写:

/// <remarks>Before calling this method, call <see cref="MethodA"> passing zero as <i>MyParam<i/> value.

当然,这会导致潜在的错误,因为编译器不再警告我参数名是否错误,如果我拼错了或在代码中更改了名称。

1
我不确定你是否能够做到,而且这实际上给我一种代码异味的感觉。 - DavidG
是的。很明显。为什么不直接在MethodB的开始处调用MethodA,而是将这个责任交给方法的使用者呢? - spender
不不,这段代码只是为了说明我需要从另一个方法中引用参数。真正的情况会有所不同(比如:“如果在调用DownloadItems方法时没有添加EmailMessageSchema.Body到<这里放参数名称>,则此属性为空”)。 - Alex
2个回答

1
你做不到。
然而,你可以声明一个类似于公共属性IsReady的属性,并在正确调用MethodA时将其设置为true。 MethodB应该检查该属性,并在其值为false时抛出InvalidOperationException。然后将此XML注释添加到MethodB
/// <exception cref="InvalidOperationException">
///     <see cref="IsReady" /> is <c>false<c>.
/// </exception>

这样你的实例状态就是公开可用的,因此调用者不需要预先知道是否使用正确的参数调用了MethodA,只需检查IsReady是否为true即可。
在我看来,“准备就绪”的实例所需的参数应该在MethodA的文档中说明,而不是在MethodB中。

1
谢谢。我添加了注释以解释代码不反映我实际拥有的代码,我只是尝试放置一些非常简单的代码并将重点放在XML方面而不是代码本身。 - Alex

0

这里非常晚(比6年还迟),不过如何:

public class Foo
{
    /// <remarks>
    /// <para>
    /// Custom InnerHTML:<br/>
    ///   <see cref="Foo.Bar(System.Boolean)">value</see> argument from another method.
    /// </para>
    /// <para>
    /// Custom InnerHTML w/Embedded Inline-Code Element:<br/>
    ///   <see cref="Foo.Bar(System.Boolean)"><c>value</c></see> argument from another method.
    /// </para>
    /// </remarks>
    public void NotBar() { }

    /// <summary>
    /// If you call this method, feces will hit the rotating metallic blades.
    /// </summary>
    /// <param name="value">The value.</param>
    public void Bar(bool value) { }
}

我认为这不会起作用,“value”在此处只是一个显示名称(在自定义的InnerHTML中)。它可以是任何文本,编译器不检查它。 - Alex
我理解原帖作者的意图,但我认为这可能是最好的解决方法,因为它将链接到正确的方法(尽管不是方法中确切的参数),同时仍然显示参数的名称而不是方法的签名。 - Kip Potter
我猜你想演示如何通过传递完整签名而不仅仅是方法名称来链接某个方法的特定重载(如果它有多个重载)。恐怕这与OP的问题无关(实际上,OP就是我)。 - Alex
如果某些内容没有回答原帖作者的问题,我认为在回答中加上警告是合适的。 - Luke Hammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接