2012-10-05 7 views
11

したがって、最初のパラメータがデフォルト値を提供し、2番目のパラメータがparamsコレクションであるメソッドシグネチャを使用できることがわかります。オプションの引数のあとにParamsを付けます

私が見ることができないのは、実際には最初の引数のデフォルト値を使用する方法です。

これはすべて可能ですか?

例方法:

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

私は、メソッドを呼び出すときに最初にメッセージパラメータを省略しようとしたとものparamsでは動作しません名前付きパラメータを、使用してみました。

コンパイルできますが、使用することはできますか?

答えて

23

私は最初のパラメータの値を指定せずにメソッドを呼び出して、次の3つの方法を見つけることができます:私は明示的にかかわらず、アレイを構築することなく、複数の値を指定する方法を発見していない

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

関連する問題