Params后跟可选参数

Jam*_*xon 12 c# optional-parameters params

所以我看到有可能有一个方法签名,其中第一个参数提供默认值,第二个参数是params集合.

我看不到的是实际使用第一个参数的默认值的方法.

它可能吗?

示例方法:

void WaitAllTasks(string message = "Running Task.WaitAll", params Task[] tasks);

我最初尝试在调用方法时省略message参数,并尝试使用命名参数,这与params不兼容.

它编译,但是可以使用它吗?

Jon*_*eet 23

我可以找到三种方法来调用方法而不指定第一个参数的值:

using System;

class Test
{
    static void PrintValues(string title = "Default",
                            params int[] values)
    {
        Console.WriteLine("{0}: {1}", title, 
                          string.Join(", ", values));
    }

    static void Main()
    {
        // Explicitly specify the argument name and build the array
        PrintValues(values: new int[] { 10, 20 });
        // Explicitly specify the argument name and provide a single value
        PrintValues(values: 10);
        // No arguments: default the title, empty array
        PrintValues();
    }
}
Run Code Online (Sandbox Code Playgroud)

我还没有找到一种方法来指定多个值而不显式构建数组...

  • 我可以看出为什么这种限制是必要的,但它有点不幸,特别是对于新的调用者信息属性.我希望能够在我的日志包装器上定义一个方法`void Info(string message,[CallerMemberName] string memberName ="",[CallerLineNumber] int lineNumber = 0,params object [] args)`. (4认同)