2016-09-03 6 views
7

この方法C#のparamsはキーワード受け入れる複数のアレイ

public static void NumberList(params int[] numbers) 
{ 
    foreach (int list in numbers) 
    { 
     Console.WriteLine(list); 
    } 
} 

検討私はこの方法及び供給は、いくつかのintegers有する単一integers又はただ一つの配列を区切り呼び出すことができます。メソッドスコープ内では、それらはnumbers(右?)という配列に配置され、そこで私はそれらを操作し続けることができます。

// Works fine 
var arr = new int[] { 1, 2, 3}; 
NumberList(arr); 

しかし、メソッドを呼び出して代わりに配列を指定したい場合、エラーが発生します。 paramsの配列をどのように有効にしますか?

// Results in error 
var arr = new int[] { 1, 2, 3}; 
var arr2 = new int[] { 4, 5, 6 }; 
NumberList(arr, arr2); 

答えて

6

必要なタイプはint[]です。したがって、単一のint[]を渡すか、個別のintパラメータを渡して、コンパイラに配列を割り当てさせる必要があります。しかし、あなたのメソッドシグネチャが許さないものは、複数の配列です。あなたが複数のアレイを通過したい場合は

、あなたは複数のアレイを渡すことができます任意のフォームを受け入れるためにあなたの方法を必要とすることができます

void Main() 
{ 
    var arr = new[] { 1, 2, 3 }; 
    NumberList(arr, arr); 
} 

public static void NumberList(params int[][] numbers) 
{ 
    foreach (var number in numbers.SelectMany(x => x)) 
    { 
     Console.WriteLine(number); 
    } 
} 
1

あなたの方法は、単一のアレイを受け入れるように設定されています。一度に複数を送信したい場合は、リストを使用することができます。

private void myMethod(List<int[]> arrays){ 
    arrays[0]; 
    arrays[1];//etc 
} 
0

あなたは訳ではありません。 しかし、このような方法で何かをoverladingすることにより、このarroundの仕事をする方法があります:

public static void NumberList(params int[][] arrays) 
{ 
    foreach(var array in arrays) 
     NumberList(array); 
} 

を参照してくださいhere

2
public void Test() 
{ 
    int[] arr1 = {1}; 
    int[] arr2 = {2}; 
    int[] arr3 = {3}; 

    Params(arr1); 
    Params(arr1, arr2); 
    Params(arr1, arr2, arr3); 
} 

public void Params(params int[][] arrs) 
{ 

} 
関連する問題