gpt4 book ai didi

c# - 如何在方法之间传递数组?

转载 作者:行者123 更新时间:2023-12-01 23:36:00 26 4
gpt4 key购买 nike

我正在阅读一本书并尝试“挑战”。在这里,我遇到了在方法之间正确返回和传递数组的问题。返回数组时出现问题,尤其是从第二种方法,然后将其传递给第三种方法进行打印。

我在概念层面上理解堆栈、堆、值和引用,但有些事情很明显 错误的。每种方法似乎都以其他方式起作用。

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

}
}
}

最佳答案

问题

你返回的数组是一个新数组:

查看您的 Reverse 函数。您创建一个名为 arrayToReturn 的新数组并返回该数组。您也永远不会修改原始输入数组 arrayToReverse

        static int[] Reverse(int[] arrayToReverse) // this input array is never modified
{
int count = arrayToReverse.Length;
// ...
arrayToReturn = new int[count]; // Here is the new array
// ...
return arrayToReturn; // you return the new array
}

现在看看您调用 Reverse 的地方,您传入了一些生成的数字,但是您忽略了函数的返回值,因此您永远不知道新数组是什么。请记住,我们在上面已经确定您不会修改输入数组的元素。所以 numbers 将保持不变。

        static void Main(string[] args)
{
int[] numbers = GenerateNumbers();
Reverse(numbers); // you ignored the return value of `Reverse`
PrintNumbers(numbers); // These are the original unreversed numbers
}

修复

选项 #1 - 存储结果的新变量

要解决此问题,请将从 Reverse 返回的数组存储在一个变量中并打印这些数字。

        static void Main(string[] args)
{
int[] numbers = GenerateNumbers();
int[] reversedNumbers = Reverse(numbers);
PrintNumbers(reversedNumbers);
}

选项 #2 - 重复使用同一个变量来存储结果

在这个选项中,您可以通过获取从 Reverse 返回的新反转数字数组并将其分配给 numbers 变量来丢弃原始数组。在该赋值之后,numbers 将引用从 Reverse 返回的反向数组。原始数组被孤立并被遗忘 - 最终被垃圾收集。

        static void Main(string[] args)
{
int[] numbers = GenerateNumbers();
// repurpose the `numbers` variable to store the result.
numbers = Reverse(numbers);
PrintNumbers(numbers);
}

关于c# - 如何在方法之间传递数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60551403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com