【发布时间】:2020-06-18 10:36:03
【问题描述】:
我正在阅读一本书并尝试“挑战”。在这里,我遇到了在方法之间正确返回和传递数组的问题。返回数组时出现问题,尤其是从第二种方法返回,然后将其传递给第三种方法进行打印。
我在概念层面上理解堆栈、堆、值和引用,但有些东西显然是 错误的。 每种方法似乎都可以正常工作。
using System;
namespace PracticeArray
{
class Program
{
static int[] GenerateNumbers()
{
Console.WriteLine("Enter a number to generate array from:");
string input = Console.ReadLine();
int inputNumber = Convert.ToInt32(input);
int[] generatedArray = new int[inputNumber];
for (int i = 0; i < generatedArray.Length; i++)
{
generatedArray[i] = i;
}
return generatedArray;
}
static int[] Reverse(int[] arrayToReverse)
{
int count = arrayToReverse.Length;
int[] arrayToReturn = new int[count];
count--;
for (int i = 0; i < arrayToReturn.Length; i++)
{
arrayToReturn[i] = arrayToReverse[count--];
}
return arrayToReturn;
}
static void PrintNumbers(int[] numbersToPrint)
{
foreach (int singleNumber in numbersToPrint)
{
Console.Write(singleNumber + ", ");
}
}
static void Main(string[] args)
{
int[] numbers = GenerateNumbers();
Reverse(numbers);
PrintNumbers(numbers);
}
}
}
【问题讨论】:
-
return不会覆盖输入参数。试试int[] newNumbers = Reverse(numbers); PrintNumbers(newNumbers); -
嗨!你只需要分配回 numbers 变量!
numbers = Reverse(numbers); -
使用
Reverse(numbers);,相当于将新阵列丢在地板上。您需要以某种方式接收它(例如,将其分配给一个变量,或将其直接传递给PrintNumbers)。这与数组无关,更多的是与从方法返回值的基础有关。 -
为什么不使用
Array.Reverse?
标签: c# arrays parameter-passing return-value