代码
public static void InitializeArray(ref double[] doubleA)
{
//array init using foreach
int i = 0;
foreach (double dub in doubleA)
{
doubleA[i++] = i + .5;
}
}
给我输出
doubleA[0] = 1.5 instead of .5
doubleA[1] = 2.5 instead of 1.5
以此类推
我不明白为什么要这么做。据我了解,doubleA[0]
应该得到0.5,因为我只加0.5,所以多余的1从哪里来?我以为它是来自int,但对于i = 0,它不应该评估为doubleA[0] = 0 + .5
吗?
到目前为止,我已经尝试编写doubleA[i++] = i + .5;
来代替,它使数组中的每个元素的值仅为0.5。
答案 0 :(得分:3)
所以让我们从i = 0
开始吧
doubleA[i++] = i + .5;
此处您正在访问数组的位置0
,但还将1
添加到i
的值中。当i == 0
时,表达式 i++
将是值0
,但是变量i
的值将增加,以使新值i
是1
。
在右侧,将使用i
的新值(1
)并将其添加到0.5
中。给出值1.5
,该值被分配回数组的索引0
(如分配左侧所示)。
我可以继续,但我想您现在可能已经明白了...
Further reading on operator ++
答案 1 :(得分:1)
这是因为您的密钥i
中的doubleA[i++]
正在递增。 i++
将使密钥增加一个,之后将其返回。以后使用(作为值)时,其值已经增加。所以现在您将其设置为1 + 0.5
。
让我们对其进行分解,并向您展示其功能等效,然后您将确切地了解正在发生的事情:
public static void InitializeArray(ref double[] doubleA)
{
//array init using foreach
int i = 0;
foreach (double dub in doubleA)
{
int key = i;
i = i + 1;
doubleA[key] = i + .5;
}
}