我遇到了以下代码的一个有趣问题。 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。
答案 0 :(得分:1)
您的“productObject”似乎是在此代码块之外声明的,因此您将引用数组中的两个元素同一个对象。因此,当您在循环中更改“productObject”时,它会影响数组中的所有项,因为它们都指向同一个确切的对象。您需要做的是让数组中的每个元素指向对象的新实例。
答案 1 :(得分:1)
看起来您正在使用productObject的单个实例,并将productObjectArray中的两个项都设置为指向该单个实例。 VendorLocationId在两者中均为2,因为这是设置为productObject的最后一个值。