En el siguiente ejemplo, la primera búsqueda en el método Main se realiza
correctamente y la segunda no. Entiendo que eso es porque Find está
comparando la referencia al objeto y no su contenido. Enonces añadí
IComparable.CompareTo a la clase CDatos (objetos a comparar) pero sigue sin
funcionar. ¿Cuál es la solución?
Saludos
using System;
using System.Collections.Generic;
using MisClases.ES;
public class CDatos : IComparable
{
// Atributos
private string nombre;
private double nota;
// Métodos
public CDatos() {} // constructor sin parámetros
public CDatos(string nom, double n) // constructor con parámetros
{
nombre = nom;
nota = n;
}
public string Nombre
{
get { return nombre; }
set { nombre = value; }
}
public double Nota
{
get { return nota; }
set { nota = value; }
}
public int CompareTo(object ob)
{
CDatos obj = (CDatos)ob;
if (nombre.CompareTo(obj.nombre) == 0 && nota == obj.nota)
return 0;
else if (nombre.CompareTo(obj.nombre) < 0)
return -1;
else
return 1;
}
}
public class Test
{
public static void Main(string[] args)
{
// Crear una lista lineal vacía
LinkedList<CDatos> le = new LinkedList<CDatos>();
// Añadir elementos a la lista
le.AddLast(new CDatos("aaa", 5));
le.AddLast(new CDatos("bbb", 6));
le.AddLast(new CDatos("ccc", 7));
CDatos obj1 = new CDatos("abcd", 10.0);
le.AddLast(obj1);
// Buscar
LinkedListNode<CDatos> actual = le.Find(obj1);
if (actual != null)
Console.WriteLine(actual.Value.Nombre); // Ok
// Buscar
CDatos obj = new CDatos("bbb", 6);
actual = le.Find(obj);
if (actual != null)
Console.WriteLine(actual.Value.Nombre); // No Ok
}
}
Leer las respuestas