Visual CSharp .NET - Problemas con ArrayList, se se modifica solo???

 
Vista:

Problemas con ArrayList, se se modifica solo???

Publicado por quilaztli (1 intervención) el 22/02/2008 07:27:10
Hola a todos, estoy haciendo un programa en el que necesito crear un vector de ArrayList. Lo que hice fue crear una clase llamada cosaContainer que tiene un arrayList y dos metodos(Add y Get), que se encargan de incluir y regresarme el valor de arrayList en un indice dado. Los objetos que almaceno en cosaContainer son de tipo "cosa. "Cosa" tiene un entero y 2 metodos: crea, y vecino, este ultimo metodo, multiplica el entero por 2.

Lo que yo necesito es crear una primera instancia cosa y almacenarla en el cosaContainer y después extraer ese objeto y con él llamar a la función vecino, para agregar al vecino a mi cosaContainer. ¿Me explico? El problema es que al extraer del arrayList() el objeto padre( por asi decirlo), modifica también mi objeto original. Es decir si tengo el array[2,4] y pido el primer valor del array para aplicarle el método vecino, que solo hace la multiplicacion ( v=get(0) ; v.vecino;) me hace esto v=4 y el vector[4,4]. ¿Me explico?

¿Como puedo hacer para que no me modifique el valor ORIGINAL del arrayList?Les pongo mi codigo.

GRACIAS

--------------------------------------------------------------------------------------------------------------------

public class cosa
{
int numO;

public void vecino() {
this.numO = this.numO * 2;
}

public cosa crea() {
Random r = new Random();
numO = r.Next(10);
return this;
}
}

-----------------------------------------------------------------------------------------------------------------------------

public class solutionContainer
{
public int count;
public ArrayList list= new ArrayList();

public solutionContainer() {
list = new ArrayList();
count = 0;
}

public void add(cosa s) {
list.Add(s);
list[count] = s;
count++;
}

public cosa Get(int index) {
Array nlist = (Array)list.ToArray().Clone();
return (cosa)nlist.GetValue(index);
}

----------------------------------------------------------------------------------------------------------

//Creo mi arreglo

solutions = new solutionContainer[5];
for (int j = 0; j < 5; j++)
solutions[j] = new solutionContainer();

//Creo los primeros valores de cosa y los almaceno en mi vector

cosa s=new cosa();
for (int j = 0; j < 5; j++){
Random r = new Random();
s = s.crea();
solutions[j].add(s);
}

//Creo el vecino y me modifica el OBJETO ORIGINAL!!!!!!

for (int j = 0; j < 5; j++)
{
s = solutions[j].Get(0);
s.vecino();
solutions[j].add(s);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con ArrayList, se se modifica solo???

Publicado por Alfonso Navarro (1 intervención) el 12/11/2008 13:58:37
Amigo no te voy a dar la solucion a tu problemas, en lo ke puedo ayudarte hasta el momento para ke tengas una mejor idea de pork pasa eso, es k el arraylist se encarga de guardar objetos, y esto significa ke a la hora de utilizarlos el envia es referencias de la direccion de memoria donde se encuentra alojado tus variables o datos, en vez de una copia de los mismo, por lo tanto por eso es k te los modifica, investiga un poco sobre lo k es "ref" el cual significa referencia, para ke te aclare mejor la idea...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar