miércoles, 6 de noviembre de 2013

¿Por qué el Except (o Intersect) de LINQ no funciona en una clase?

Recién estuve trabajando con colecciones de clases personalizadas, apoyándome de LINQ. Todo iba estupendamente hasta que me percate que algunos casos donde utilizaba Except o Intersect no arrojaba los resultados esperados. 

Un poco de la ayuda de Google y otros sitios no menos útiles y encontré que esto se debía a que mi clase no implementaba la interfaz IEquatable. Implementé el método Equals de la interfaz, así como cambien sobreescribí el método GetHashCode, y todo comenzó a funcionar perfecto (desconozco si el método GetHashCode no será requerido en todos los casos, pero yo tuve que agregarlo). 

Me apoye de la siguiente pagina, por si buscan la fuente original. También dejo aquí el código de ejemplo. 

public class Promo : IEquatable<Promo>
{
   // Resto del código aquí

  public bool Equals(Promo other) 
  { 
     if (other == null) return false; 
     return other.promo_code.Equals(this._promo_code); 
  } 

  public override int GetHashCode()
  { 
     int hashTextual = this._promo_code == null ? 0 : this._promo_code.GetHashCode(); 
     return hashTextual; 
  } 
}

No hay comentarios:

Publicar un comentario en la entrada