2016-09-03 5 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

Вы не можете использовать langauge. Однако есть способ работы Arround это, overlading метод что-то вроде этого:

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

} 

 Смежные вопросы

  • Нет связанных вопросов^_^