2012-10-05 28 views
11

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

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

是否有可能?

实施例方法:

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

我最初试图调用方法时省略消息参数,并使用已命名的参数,其不使用参数的工作也尝试。

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

回答

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

我还没有发现无需明确建立阵列虽然指定多个值的方式...

+0

反思呢? – Servy

+0

@Servy:不,反射会要求你指定所有的参数。 –

+1

奇怪的是,C#编译器不允许使用'values:{10,20}'或'values:(10,20)'。我搜索了很多,看来你的方式是最好的方式。 – gdoron