我有此代码:
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
我不知道为什么会这样。我该如何解决?
答案 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]);
}