14

So I see that it's possible to have a method signature where the first parameter provides a default value and the second parameter is a params collection.

What I can't see is a way to actually use the default value of the first argument.

Is it at all possible?

Example method:

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

I initially tried omitting the message parameter when calling the method and also tried using named parameters, which doesn't work with params.

It compiles, but is it possible to use it?

4

1 回答 1

27

我可以找到三种调用方法的方法,而无需为第一个参数指定值:

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();
    }
}

我还没有找到一种在不显式构建数组的情况下指定多个值的方法......

于 2012-10-05T13:22:21.017 回答