【问题标题】:C# params keyword accepting multiple arraysC# params 关键字接受多个数组
【发布时间】:2016-09-03 17:38:06
【问题描述】:

考虑这个方法

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

【问题讨论】:

    标签: c# .net arrays params


    【解决方案1】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          你不能用语言的方式。 然而,有一种方法可以通过覆盖类似这样的方法来解决这个问题:

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

          here

          【讨论】:

            猜你喜欢
            • 2017-04-24
            • 1970-01-01
            • 2013-04-18
            • 1970-01-01
            • 2015-08-18
            • 2021-09-24
            • 2018-11-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多