ASP.net c#魔法阵列问题

时间:2009-04-28 04:25:04

标签: c# asp.net arrays

我遇到了以下代码的一个有趣问题。 productObject是一个自定义对象,包含许多与产品相关的变量,包括'VendorLocationId'。

在列表框中给出这些项目:

“A镇”值:1

“B镇”值:2

同样给出:在列表框中选择了两个项目。

1  productObjectArray[] productObjectArray = new productObjectArray[lstLocation.Items.Count];
2  int counter = 0;
3  foreach (ListItem li in lstLocation.Items)
4  {
5    if (li.Selected == true)
6    {
7      productObject.VendorLocationId = li.Value;
8      productObjectArray[counter] = productObject;
9    }
10   counter++;
11 }

执行后,上面的代码给出了这个结果:

productObjectArray[0].VendorLocationId = 2
productObjectArray[1].VendorLocationId = 2 

我发现这令人困惑。如果我单步执行代码,则productObjectArray [0] .VendorLocationId = 1,counter = 1,直到第7行。然后productObjectArray [0] .VendorLocationId神奇地等于2,counter = 1。

2 个答案:

答案 0 :(得分:1)

您的“productObject”似乎是在此代码块之外声明的,因此您将引用数组中的两个元素同一个对象。因此,当您在循环中更改“productObject”时,它会影响数组中的所有项,因为它们都指向同一个确切的对象。您需要做的是让数组中的每个元素指向对象的新实例。

答案 1 :(得分:1)

看起来您正在使用productObject的单个实例,并将productObjectArray中的两个项都设置为指向该单个实例。 VendorLocationId在两者中均为2,因为这是设置为productObject的最后一个值。