C# 数组值不变吗?

C# 数组值不变吗?,c#,C#,由于某些原因,这不会编辑输入到其中的数组的大小,并且不会将数据添加到输入的数组中 public static void RandomizeArray(int[] array) { int intRead; int intReadSeed; Random randomNum = new Random(); Console.WriteLine("How many ints do you want to randomly

由于某些原因,这不会编辑输入到其中的数组的大小,并且不会将数据添加到输入的数组中

    public static void RandomizeArray(int[] array)
    {
        int intRead;
        int intReadSeed;
        Random randomNum = new Random();
        Console.WriteLine("How many ints do you want to randomly generated?");
        intRead = Convert.ToInt32(Console.ReadLine());
        array = new int[intRead];
        Console.WriteLine("What's the maximum value of the randomly generated ints?");
        intReadSeed = Convert.ToInt32(Console.ReadLine());
        for (int i = 0; i < intRead; i++)
        {
            array[i] = (randomNum.Next(intReadSeed));
        }
        Console.WriteLine("Randomization Complete.\n");
    }
publicstaticvoidrandomizarray(int[]数组)
{
int intRead;
int-intReadSeed;
随机数=新随机数();
WriteLine(“您希望随机生成多少整数?”);
intRead=Convert.ToInt32(Console.ReadLine());
数组=新整数[intRead];
WriteLine(“随机生成的int的最大值是多少?”);
intReadSeed=Convert.ToInt32(Console.ReadLine());
for(inti=0;i
当您将数组传递给此方法时,您通过值传递它-也就是说,您创建了一个全新的变量,该变量也指向相同的对象。如果在方法中编辑变量
array
,使其指向新数组,则不会使另一个变量指向新数组-它仍然指向旧数组。因此,当您返回时,您尚未对传入的
数组进行任何编辑


要解决此问题,
返回数组,并将签名从
void
更改为
int[]
。或者您可以将int[]array
作为参数,这样您就可以通过引用传递并对其进行编辑。

当您将数组传递给此方法时,您可以通过值传递它-也就是说,您创建了一个全新的变量,该变量也指向同一对象。如果在方法中编辑变量
array
,使其指向新数组,则不会使另一个变量指向新数组-它仍然指向旧数组。因此,当您返回时,您尚未对传入的
数组进行任何编辑


要解决此问题,
返回数组,并将签名从
void
更改为
int[]
。或者您可以将
out int[]array
作为参数,这样您就可以通过引用传递并对其进行编辑。

简单修复将参数声明为
out

public static void RandomizeArray(out int[] array)
{
    int intRead;
    int intReadSeed;
    Random randomNum = new Random();

    Console.WriteLine("How many ints do you want to randomly generated?");

    intRead = Convert.ToInt32(Console.ReadLine());
    array = new int[intRead];

    Console.WriteLine("What's the maximum value of the randomly generated ints?");
    intReadSeed = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < intRead; i++)
    {
        array[i] = (randomNum.Next(intReadSeed));
    }

    Console.WriteLine("Randomization Complete.\n");
}
但是,最好只返回一个数组

public static int[] GenerateRandomizedArray()
{
    int intRead;
    int intReadSeed;
    Random randomNum = new Random();

    Console.WriteLine("How many ints do you want to randomly generated?");
    intRead = Convert.ToInt32(Console.ReadLine());
    var array = new int[intRead];

    Console.WriteLine("What's the maximum value of the randomly generated ints?");
    intReadSeed = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < intRead; i++)
    {
        array[i] = (randomNum.Next(intReadSeed));
    }

    Console.WriteLine("Randomization Complete.\n");

    return array;
}
public static int[]GenerateRandomizedArray()
{
int intRead;
int-intReadSeed;
随机数=新随机数();
WriteLine(“您希望随机生成多少整数?”);
intRead=Convert.ToInt32(Console.ReadLine());
变量数组=新整数[intRead];
WriteLine(“随机生成的int的最大值是多少?”);
intReadSeed=Convert.ToInt32(Console.ReadLine());
for(inti=0;i
简单修复将参数声明为
out

public static void RandomizeArray(out int[] array)
{
    int intRead;
    int intReadSeed;
    Random randomNum = new Random();

    Console.WriteLine("How many ints do you want to randomly generated?");

    intRead = Convert.ToInt32(Console.ReadLine());
    array = new int[intRead];

    Console.WriteLine("What's the maximum value of the randomly generated ints?");
    intReadSeed = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < intRead; i++)
    {
        array[i] = (randomNum.Next(intReadSeed));
    }

    Console.WriteLine("Randomization Complete.\n");
}
但是,最好只返回一个数组

public static int[] GenerateRandomizedArray()
{
    int intRead;
    int intReadSeed;
    Random randomNum = new Random();

    Console.WriteLine("How many ints do you want to randomly generated?");
    intRead = Convert.ToInt32(Console.ReadLine());
    var array = new int[intRead];

    Console.WriteLine("What's the maximum value of the randomly generated ints?");
    intReadSeed = Convert.ToInt32(Console.ReadLine());

    for (int i = 0; i < intRead; i++)
    {
        array[i] = (randomNum.Next(intReadSeed));
    }

    Console.WriteLine("Randomization Complete.\n");

    return array;
}
public static int[]GenerateRandomizedArray()
{
int intRead;
int-intReadSeed;
随机数=新随机数();
WriteLine(“您希望随机生成多少整数?”);
intRead=Convert.ToInt32(Console.ReadLine());
变量数组=新整数[intRead];
WriteLine(“随机生成的int的最大值是多少?”);
intReadSeed=Convert.ToInt32(Console.ReadLine());
for(inti=0;i
注意:您应该使用
randomNum.Next(intReadSeed+1)
,否则最大值将比
intReadSeed
小一个。注意:您应该使用
randomNum.Next(intReadSeed+1)
,否则最大值将比
intReadSeed
小一个。在这种情况下,根本不使用传入数组,因此,如果选择了第一个修复,也删除了参数,如果使用了第二个修复,则写出
而不是
ref
,正如Romoku在回答中所建议的那样。在这种情况下,写出int[]数组或只返回一个值更有效?@user1067625它们同样有效,但是大多数方法都返回
而不是
out
out
通常仅用于从方法“返回”多个对象的情况。在这种情况下,根本不使用传入数组,因此如果选择了第一个修复,也删除参数,如果使用了第二个修复,则写入
out
而不是
ref
,如Romoku在回答中所建议的那样。在这种情况下,执行int[]数组还是只返回一个值更有效?@user1067625它们同样有效,但大多数方法都执行
返回
而不是
输出
out
通常仅用于从方法“返回”多个对象的情况。