C#中Action参数的XML文档说明

5
我希望能找到一种方法来记录C#中的动作参数。代码看起来像这样:

/// <summary>
/// Do some action with parameters.
/// </summary>
/// <params name="someAction"> This is action but what about parameters? </param>
public void Do(Action<int,int,string> someAction)

我应该如何命名和记录“someAction”的参数,以便它们会出现在Intellisense中?


3
只需参考第一、第二和第三个参数即可。 - Jon Skeet
1
你的意思是如何在Intellisense中显示它并进行语法高亮?还是记录类型参数? - Furkan Kambay
当我在VS中输入Do(时,它会自动补全为(i,i1,arg3) =>。我想要的是名称而不是i,i1和arg3。 - Optional Option
2
只需将其记录为“要执行的操作。当通过此方法调用时,第一个参数将是索引,第二个参数将是计数,第三个参数将是名称”,或者其他什么内容。 Action <int,int,string>的参数只是命名为arg1arg2arg3 - Jon Skeet
2
你可以使用单独的委托来实现。因此,不要使用Action - 而是使用具有有意义的参数名称和文档的自定义委托。 - Evk
显示剩余3条评论
2个回答

1
简而言之,不可能。有几种可能的解决方法:
  • 使用类或结构体代替多个参数。例如,使用Action<ThreePigletsClass>代替Action<int,int,int>
  • 尽可能减少参数的数量。也许有些参数是不必要的,只需要简单的Action。
  • 编写参数注释...虽然这并没有太大帮助,但可以获得Stackoverflow积分。
  • 如果不排斥委托,请使用它们。

1
你可以使用嵌套结构。
/// <summary>
/// Does something useful.
/// </summary>
/// <param name="c">A constant</param>
/// <param name="someAction">
///     Here is an action.
///     <param name="someAction arg1">Count</param>
///     <param name="someAction arg2">Length</param>
///     <param name="someAction arg2">Content</param>
/// </param>
public void Do(int c, Action<int,int,string> someAction){}

在编辑器中,它看起来像这样:

输入图像描述

然而,对于复杂的结构,在长期维护方面会更加困难。如果上下文不是显然的,最好和更安全的方法是创建一个类。

public class MyActionArgs : ActionArgs
{
    public MyActionArgs(int count, int length, string content)
    {
        Count = count;
        Length = length;
        Content = content ?? throw new ArgumentNullException(nameof(content));
    }

    public int Count { get; }
    public int Length { get; }
    public string Content { get; }
}

public void Do(Action<MyActionArgs> myAction){} 

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