C#中的params关键字接受多个数组

8
考虑这个方法。
public static void NumberList(params int[] numbers)
{
    foreach (int list in numbers)
    {
        Console.WriteLine(list);
    }
}

我可以调用这个方法并提供单独的分离的整数或只是一个包含多个整数的数组。在该方法范围内,它们将被放置到一个名为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);
4个回答

7

你所需要的类型是一个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);
    }
}

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

}

1
你的方法只能接受一个数组。如果想要一次发送多个数组,可以使用List。
private void myMethod(List<int[]> arrays){
   arrays[0];
   arrays[1];//etc
}

0

你无法通过语言方式实现这一点。 然而,有一种方法可以通过重载该方法来解决此问题:

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

请点击这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接