2009-04-28 3 views
1

Je rencontre un problème intéressant avec le code suivant. productObject est un objet personnalisé qui contient un certain nombre de variables liées au produit, y compris un 'VendorLocationId'.ASP.net C# numéro de tableau magique

Compte tenu de ces éléments dans une zone de liste:

valeur "Ville A": 1

valeur "Ville B": 2

donné également: les deux éléments sont sélectionnés au sein de la zone de liste.

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 } 

Après l'exécution, le code ci-dessus donne ce résultat:

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

Je trouve cela laisse perplexe. Si je passe par le code, productObjectArray [0] .VendorLocationId = 1 et counter = 1 jusqu'à la ligne 7. Then productObjectArray [0] .VendorLocationId est magiquement égal à 2 et counter = 1.

Répondre

1

Il semble que votre "productObject" soit déclaré en dehors de ce bloc de code, et vous faites donc référence aux deux éléments de votre tableau à le même objet. Par conséquent, lorsque vous modifiez "productObject" la dernière fois dans la boucle, il affecte tous les éléments du tableau, car ils pointent tous vers le même objet exact. Ce que vous devez faire est que chaque élément du tableau pointe vers une nouvelle instance de votre objet.

+0

Exactement raison, merci. J'ai corrigé le code en générant un nouvel objet pour chaque élément de tableau. – Paulj

1

Il semble que vous utilisiez une seule instance de productObject et définissiez les deux éléments dans productObjectArray pour pointer vers cette instance unique. VendorLocationId est 2 dans les deux parce que c'était la dernière valeur définie sur productObject.