【问题标题】:Creating a method that returns an array创建一个返回数组的方法
【发布时间】:2016-04-05 23:00:49
【问题描述】:

我将创建一个辅助方法,它返回一个新数组,其元素是原始数组的平方。但是当我运行代码时,控制台返回“System.Double[]”。我该如何解决这个问题?

方法代码如下:

static double[] powerOfTwo(int[] arr)
        {
            double[] elevatedPower = new double[10];
            elevatedPower[0] = Math.Pow(arr[0], 2);
            elevatedPower[1] = Math.Pow(arr[1], 2);
            elevatedPower[2] = Math.Pow(arr[2], 2);
            elevatedPower[3] = Math.Pow(arr[3], 2);
            elevatedPower[4] = Math.Pow(arr[4], 2);
            elevatedPower[5] = Math.Pow(arr[5], 2);
            elevatedPower[6] = Math.Pow(arr[6], 2);
            elevatedPower[7] = Math.Pow(arr[7], 2);
            elevatedPower[8] = Math.Pow(arr[8], 2);
            elevatedPower[9] = Math.Pow(arr[9], 2);

            return elevatedPower;
        }

以及在控制台中打印它的代码:

static void Main(string[] args)
        {
            double[] powerValues = powerOfTwo(new int[] {1,2,3,4,5,6,7,8,9,10});
            Console.Write(powerValues);
            Console.ReadLine();
        }

【问题讨论】:

  • 你想打印什么?你的所有平方值?
  • 这会一直显示这种值,需要用for循环显示整个数组。
  • 打印数组的元素而不是打印数组本身

标签: c# arrays methods


【解决方案1】:

您的方法效果很好。但是当你执行Console.WriteLine(powerValues) 时,编译器会调用ToString() 数据类型为System.double[] 的方法。

foreach(var value in powerValues)
    Console.WriteLine(value);

使用 Linq,using System.Linq;

var powerValues = (new int[] {1,2,3,4,5,6,7,8,9,10}).Select(x => x*x);

【讨论】:

    【解决方案2】:

    实际上,您没有打印您的价值观。你尝试打印你的数组,它返回它的完整类型名称为System.Double[],因为ToString 调用它,它由Console.Write 显式调用。

    你甚至不需要这样的方法。只需使用Enumerable.Select 生成包含平方值的IEnumerable<int>,例如;

    var values = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    foreach (var value in values.Select(i => i * i))
    {
         Console.Write(value); // 149162536496481100
    }
    

    如果您选择Write(如Console.Write(value + " ")),我会使用Console.WriteLine 将这些值分别写在单独的行中,或者在它们之后至少放置一个空格

    【讨论】:

      【解决方案3】:

      当您调用Console.Write(powerValues); 时,实际上调用Console.Write(powerValues.ToString());ToString 返回一个表示当前对象的字符串。对于 double[],这是“System.Double[]”。 像这样更改您的代码:

          static void Main(string[] args)
          {
              double[] powerValues = powerOfTwo(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
              foreach (var value in powerValues)
              {
                  Console.WriteLine(value);
              }
      
              Console.ReadLine();
          }
      

      【讨论】:

        【解决方案4】:

        使用下面的代码在简单的一行中编写您的代码。

        new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }.ToList().ForEach(i => Console.WriteLine(i * i));
        

        并且每个值都显示在新行中,因此结果与其他值相比也很好。

        【讨论】:

          猜你喜欢
          • 2018-12-16
          • 1970-01-01
          • 1970-01-01
          • 2011-02-04
          • 2023-04-07
          • 1970-01-01
          • 2015-02-18
          • 2014-08-07
          • 1970-01-01
          相关资源
          最近更新 更多