2016-09-03 20 views
7

ben bu yöntemi çağırabilirsiniz ve tedarik birkaç integers tek integers veya sadece bir dizi ayrılmış bu yöntemiC# parametreler birden diziler

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

düşünün kabul anahtar kelime. Metot kapsamı içerisinde, bunlar, manipüle etmeye devam edebildiğim numbers(sağda?) dizisine yerleştirilecektir. Ben yöntemini çağırın ve bunun yerine diziler tedarik istiyorsanız

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

Ama bir hata alıyorum. params için dizileri nasıl etkinleştirirsiniz?

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

cevap

6

İstediğiniz tür bir int[]. Yani ya tek bir int[] geçirmeniz ya da bireysel int parametrelerini geçmeniz ve derleyicinin diziyi sizin için ayırmasına izin vermeniz gerekir. Ancak, yöntem imzanızın izin vermediği, çoklu dizilerdir. Birden diziler geçmek istiyorsanız

, birden diziler iletilmesine izin veren herhangi bir biçimde kabul edecek yöntemi gerektirebilir:

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

Yöntemin yalnızca tek bir dizi kabul edecek şekilde ayarlanmıştır. Aynı anda birden fazla göndermek istiyorsanız bir Listeyi kullanabilirsiniz.

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

Langauge araçlarıyla yapamazsınız. Ancak böyle bir yöntem şey overlading bu civarı çalışmak için bir yol yoktur:

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

Bkz 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) 
{ 

} 
İlgili konular