Saturday 15 January 2011

c# - Modifying data member in loop of IList modifies other of elements of IList -



c# - Modifying data member in loop of IList modifies other of elements of IList -

i'm confused problem , not sure how title question.

i've created ilist of 1 of classes , used .add() populate ilist. 1 time ilist populated need iterate through ilist trivial check of values , set 1 of info members of each element 0.00.

the issue setting info fellow member of 1 element setting same info fellow member of next elements. here illustration of code:

public class myclass { private int _id; private string _modelname; private double _price; public int id { { homecoming _id; } set { _id = value; } } public string modelname { { homecoming _modelname; } set { _modelname= value; } } public double cost { { homecoming _price; } set { _price = value; } } }

i using myclass this:

ilist<myclass> myclasses = new list<myclass>(); myclasses.add( new myclass { id = 1, modelname = "model1", cost = 119310.05 }); myclasses.add( new myclass { id = 2, modelname = "model1", cost = 119310.05 }); myclasses.add( new myclass { id = 3, modelname = "model1", cost = 119310.05 }); myclasses.add( new myclass { id = 4, modelname = "model1", cost = 119310.05 }); myclasses.add( new myclass { id = 5, modelname = "model2", cost = 19810.32 }); myclasses.add( new myclass { id = 6, modelname = "model2", cost = 19810.32 }); myclasses.add( new myclass { id = 7, modelname = "model2", cost = 19810.32 }); foreach( myclass myclass in myclasses ) { ... ... myclass.price = 0.00; ... ... }

ok, above code extremely simple representation of actual code. happening when set myclass.price = 0.00; in foreach loop of cost info members matching modelname getting changed 0.00. so, in foreach loop when set element id = 1 cost = 0.00 seeing in ilist:

myclasses.add( new myclass { id = 1, modelname = "model1", cost = 0.00 }); myclasses.add( new myclass { id = 2, modelname = "model1", cost = 0.00 }); myclasses.add( new myclass { id = 3, modelname = "model1", cost = 0.00 }); myclasses.add( new myclass { id = 4, modelname = "model1", cost = 0.00 }); myclasses.add( new myclass { id = 5, modelname = "model2", cost = 19810.32 }); myclasses.add( new myclass { id = 6, modelname = "model2", cost = 19810.32 }); myclasses.add( new myclass { id = 7, modelname = "model2", cost = 19810.32 });

i sense totally stupid question asking , end finding as stupid reason happening. i've used f11 step every line of code involved , don't see anyplace cost getting set in other elements. matter, myclass braindead existence of beingness contained in ilist.

it seems beingness caused in loop itself. i've tried approach same behavior:

for (int p = 0; p < myclasses.count; p++ ) { ... ... myclass[p].price = 0.00; ... ... }

i've added watch:

myclasses[p].price myclasses[p + 1].price myclasses[p + 2].price myclasses[p + 3].price myclasses[p + 4].price

stepping through loop shows when myclasses[p].price set 0.00 of other elements' cost fellow member set 0.00.

is there possible explanation behavior other there beingness causing in class? perchance ilist?

the obvious reply question copying same reference single instance of myclass each unique modelname value, list has same instance in multiple times. without proper concise-but-complete code example, it's impossible sure.

c# ilist

No comments:

Post a Comment