C#:意外的输出

时间:2019-03-01 13:52:40

标签: c#

我有此代码:

static int[] a = {0 , 10 , 20, 30, 40};

public static void Main()
{
    for (int i = 0; i < 10; i++){
        int[] array = a;
        for (int j = 1; j < array.Length; j++)
            array[j] += array[j - 1];

        Console.WriteLine(array[4]);
    }
}

在控制台中,我得到以下结果:

100
200
350
560
840

但是我没想到这不是我想要的。我想要以下结果:

100
100
100
100
100

我不知道为什么会这样。我该如何解决?

4 个答案:

答案 0 :(得分:3)

似乎通过执行int[] array = a您正在处理a的引用,因此每次修改array(在j for循环中)时,重新更新a数组。在下一个循环中,a的值将与先前更新的值保持一致。

看看Copy方法。

答案 1 :(得分:0)

您可以克隆数组

static int[] a = { 0, 10, 20, 30, 40 };

public static void Main()
{
    for (int i = 0; i < 10; i++)
    {
        int[] array = (int[])a.Clone();
        for (int j = 1; j < array.Length; j++)
            array[j] += array[j-1];

        Console.WriteLine(array[4]);
    }
}

答案 2 :(得分:0)

使用此:+----+-----------+-------+------------------------+ | id | entity_id | stage | timestamp | +----+-----------+-------+------------------------+ | 1 | 1 | 1 | 2019-01-01 12:12:01 | | 2 | 1 | 2 | 2019-01-01 12:12:10 | | 3 | 1 | 3 | 2019-01-01 12:12:15 | | 4 | 2 | 1 | 2019-01-01 12:14:01 | | 5 | 2 | 2 | 2019-01-01 12:14:10 <--| | 6 | 3 | 1 | 2019-01-01 12:24:01 | +----+-----------+-------+------------------------+ 代替int[] array = a.ToArray();

c#中的数组是引用类型,而不是像int这样的值类型,因此当您将a设置为数组时,a和array是同一对象。

答案 3 :(得分:0)

您的问题是对象引用。你可以试试看。

 for (int i = 0; i < 10; i++)
        {
            int[] array = new int[5];

            for (int e = 0; e < array.Length; e++)
            {
                array[e] = a[e];
            }

            for (int j = 1; j < array.Length; j++)
                array[j] += array[j - 1];

            Console.WriteLine(array[4]);
        }