buenísimo!! 
muchas gracias

From: Leonardo Micheloni 
Sent: Monday, February 17, 2014 9:33 PM
To: puntonet@mug.org.ar 
Subject: [puntonet] equals

Gabriel tiene razón, para .net ambos objetos son referencias (es decir un 
puntero a un lugar en la memoria) cuando hacés equals se comparan las 
posiciones y siempre te va a dar que son diferentes (esto no pasa con tipos por 
valor como enteros por ejemplo en donde la variable tiene el valor y no un 
referencia)
Una lisda forma de solucionarlo es implementando tu propia lista, creando una 
clase que implemente IList<string> así:

    class MiLista : IList<string>
    {
        private List<string> lista = new List<string>();

        public int IndexOf(string item)
        {
            return this.lista.IndexOf(item);
        }

        public void Insert(int index, string item)
        {
            this.lista.Insert(index, item);
        }

        public void RemoveAt(int index)
        {
            this.lista.RemoveAt(index);
        }

        public string this[int index]
        {
            get
            {
                return this.lista[index];
            }
            set
            {
                this.lista[index] = value;
            }
        }

        public void Add(string item)
        {
            this.lista.Add(item);
        }

        public void Clear()
        {
            this.lista.Clear();
        }

        public bool Contains(string item)
        {
            return this.lista.Contains(item);
        }

        public void CopyTo(string[] array, int arrayIndex)
        {
            this.lista.CopyTo(array, arrayIndex);
        }

        public int Count
        {
            get { return this.lista.Count; }
        }

        public bool IsReadOnly
        {
            get { return false; }
        }

        public bool Remove(string item)
        {
            return this.lista.Remove(item);
        }

        public IEnumerator<string> GetEnumerator()
        {
            return this.lista.GetEnumerator();
        }

        System.Collections.IEnumerator 
System.Collections.IEnumerable.GetEnumerator()
        {
            return this.lista.GetEnumerator();
        }

        // acá se realiza la verdadera comparación
        public override bool Equals(object obj)
        {
            var equals = false;
            var otralista = (IList<string>) obj;

            if(otralista.Count!=this.lista.Count) return false;

            for (var i = 0; i< this.lista.Count; i++)
            {
                var item = this.lista[i];
                if(!item.Equals(otralista[i])) return false;
            }

            return true;
        }
    }

Es bastante código pero es un wrapper que solamente sobre-escribe el método 
equals y compara los strings uno por uno, si modificás tu código para que use 
la lista nueva vas a ver que funciona como creo que vos esperás

            IList<string> lista1 = new MiLista();
            IList<string> lista2 = new MiLista();
            
            for (int i = 0; i <= 10; i ++)
            {
                lista1.Add(i.ToString());
                lista2.Add(i.ToString());
            }

            if (lista1.Equals(lista2))
            {
                Console.Write("iguales");
            }
            else
            {
                Console.Write("dif");
            }

saludos






2014-02-17 19:01 GMT-03:00 Gabriel Osorio <ge.ex...@gmail.com>:

  Mira: 
  http://msdn.microsoft.com/es-es/library/bsc2ak47(v=vs.110).aspx


  En tu caso está comparando las dos referencias. Al ser objetos diferentes, el 
resultado es falso.




  El 17 de febrero de 2014, 15:57, Ing. Roxana Leituz 
<roxanalei...@yahoo.com.ar> escribió: 


    consulta.. porque no entiendo.., tengo dos listas genéricas de string.. uso 
equals para compararlas, le cargo los mismos datos..pero me da falso?? no 
debería comparar por valor??
    ejemplo
    List<string> lista1 = new List<string>();
             List<string> lista2 = new List<string>();
             for (int i = int.Parse(PuntNumI.Text); i <= 
int.Parse(PuntNumFin.Text); i += int.Parse(PuntNumInt.Text))
             {
                 lista1.Add(i.ToString());
                 lista2.Add(i.ToString());
             }

    if (lista1.Equals(lista2))
               {
                   Response.Write("iguales");
               }
               else
                   Response.Write("dif");

    primero eran valores iguales de dos controles diferentes..dije bueno..que 
hago mal..entonces probé con los mismos... y false siempre, en que estoy 
metiendo la pata? o es que solo compara por referencia??
    muchas gracias!!





-- 

Leonardo Micheloni
@leomicheloni

<<wlEmoticon-smilewithtongueout[1].png>>

Responder a