繁体   English   中英

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

[英]C# params keyword accepting multiple arrays

考虑这种方法

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

您需要的类型是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);
    }
}
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)
{

}

您的方法仅设置为接受单个数组。 如果要一次发送多个List,可以使用List。

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

你不能用langauge的意思。 但是有一种方法可以通过重叠这样的方法来解决这个问题:

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

看到这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM