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);
}
}
您的方法只设置为接受单个数组。如果您想一次发送多个,可以使用列表。
private void myMethod(List<int[]> arrays){
arrays[0];
arrays[1];//etc
}
你不能通过语言手段。
然而,有一种方法可以通过重载这样的方法来解决这个问题:
public static void NumberList(params int[][] arrays)
{
foreach(var array in arrays)
NumberList(array);
}
见here
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)
{
}
考虑这个方法
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);
}
}
您的方法只设置为接受单个数组。如果您想一次发送多个,可以使用列表。
private void myMethod(List<int[]> arrays){
arrays[0];
arrays[1];//etc
}
你不能通过语言手段。 然而,有一种方法可以通过重载这样的方法来解决这个问题:
public static void NumberList(params int[][] arrays)
{
foreach(var array in arrays)
NumberList(array);
}
见here
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)
{
}