2016-09-03 14 views
7

xem xét phương pháp nàyC# params keyword chấp nhận nhiều mảng

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

tôi có thể gọi phương pháp này và cung cấp tách đơn integers hoặc chỉ là một mảng với một số integers. Trong phạm vi phương thức, chúng sẽ được đặt vào một mảng gọi là numbers(phải không?) nơi tôi có thể tiếp tục thao tác chúng.

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

Nhưng nếu tôi muốn gọi phương thức và cung cấp mảng thay vào đó, tôi gặp lỗi. Làm cách nào để bạn bật mảng cho params?

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

Trả lời

6

Loại bạn đang yêu cầu là int[]. Vì vậy, bạn cần phải vượt qua một đơn int[] hoặc truyền các thông số riêng lẻ int và để trình biên dịch phân bổ mảng cho bạn. Nhưng những gì chữ ký phương thức của bạn không cho phép là nhiều mảng.

Nếu bạn muốn vượt qua nhiều mảng, bạn có thể yêu cầu phương pháp của bạn để chấp nhận bất kỳ hình thức cho phép nhiều mảng để được thông qua:

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

phương pháp của bạn chỉ được thiết lập để chấp nhận một mảng duy nhất. Bạn có thể sử dụng Danh sách nếu bạn muốn gửi nhiều danh sách cùng một lúc.

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

Bạn không thể bởi langauge phương tiện. Tuy nhiên có một cách để làm việc này bằng cách arround overlading phương pháp một cái gì đó như thế này:

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

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

} 
Các vấn đề liên quan