我不明白为什么阵列没有给出正确的答案

时间:2017-12-01 22:56:32

标签: c#

char[] temparr = str;

for (int q = 0; q < temparr.Length; q++)
{
    if (q == 0) { temparr[q] = firstNewElement; }
    else { temparr[q] = str[q - 1]; }
} 
str = temparr;

为什么此代码会将所有temparr元素设置为firstNewElement变量?

注意:str也是一个数组。这不是完整的代码

2 个答案:

答案 0 :(得分:1)

分配时

char[] temparr = str;

您没有创建新的临时数组,只需将temparr指向str,然后修改strtemparr

您需要复制str

char[] temparr = (char[])str.Clone();

您意识到您将使用此代码删除str的最后一个元素,对吗?

执行相同操作的更有效方法是:

Array.Copy(str, 0, str, 1, str.Length-1);
str[0] = firstNewElement;

答案 1 :(得分:-1)

因为通过char[] temparr = str;,您正在复制对数组的引用。所以

Q = 0

temparr[0] = firstNewElement;

Q = 1

temparr[1] = str[0]; // str[0] is temparr[0], temparr[0] is firstNewElement

而不是char[] temparr = str;,请考虑char[] temparr = str.Clone();复制数组str的值。