// ===++===
//
// OrtizOL
//
// ===--===
/*============================================================
//
// Clase: Producto.cs
//
// Propósito: Uso de la interfaz IEquatable.
//
============================================================*/
using System;
using System.Collections.Generic;
using System.Linq;
namespace Recetas.Cap02
{
internal class Producto : IEquatable<Producto>
{
public string Nombre
{
get;
set;
}
public int Codigo
{
get;
set;
}
public bool Equals(Producto p)
{
if (Object.ReferenceEquals(p, null))
{
return false;
}
if (Object.ReferenceEquals(this, p))
{
return true;
}
return Codigo.Equals(p.Codigo) && Nombre.Equals(p.Nombre);
}
public override int GetHashCode()
{
int hashNombre = Nombre == null ? 0 : Nombre.GetHashCode();
int hashCodigo = Codigo.GetHashCode();
return hashNombre ^ hashCodigo;
}
}
internal class PruebaProducto
{
static public void Main()
{
Producto[] productos = {
new Producto { Nombre = "Teclado", Codigo = 31001},
new Producto { Nombre = "Kindle", Codigo = 97001},
new Producto { Nombre = "Mouse", Codigo = 72004},
new Producto { Nombre = "Kindle", Codigo = 97001}
};
// Remoción de duplicados:
IEnumerable<Producto> sinDuplicados = productos.Distinct();
foreach (Producto producto in sinDuplicados)
{
Console.WriteLine("{0} - {1}", producto.Nombre, producto.Codigo);
}
}
}
}
Ly8gPT09Kys9PT0KLy8KLy8JT3J0aXpPTAovLwovLyA9PT0tLT09PQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLwovLyBDbGFzZTogUHJvZHVjdG8uY3MKLy8KLy8gUHJvcMOzc2l0bzogVXNvIGRlIGxhIGludGVyZmF6IElFcXVhdGFibGUuCi8vCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgp1c2luZyBTeXN0ZW07CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uTGlucTsKCm5hbWVzcGFjZSBSZWNldGFzLkNhcDAyCnsKCWludGVybmFsIGNsYXNzIFByb2R1Y3RvIDogSUVxdWF0YWJsZTxQcm9kdWN0bz4KCXsKCQlwdWJsaWMgc3RyaW5nIE5vbWJyZQoJCXsKCQkJZ2V0OwoJCQlzZXQ7CgkJfQoJCQoJCXB1YmxpYyBpbnQgQ29kaWdvCgkJewoJCQlnZXQ7CgkJCXNldDsKCQl9CgkJCgkJcHVibGljIGJvb2wgRXF1YWxzKFByb2R1Y3RvIHApCgkJewoJCQlpZiAoT2JqZWN0LlJlZmVyZW5jZUVxdWFscyhwLCBudWxsKSkKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCQoJCQlpZiAoT2JqZWN0LlJlZmVyZW5jZUVxdWFscyh0aGlzLCBwKSkKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJCgkJCXJldHVybiBDb2RpZ28uRXF1YWxzKHAuQ29kaWdvKSAmJiBOb21icmUuRXF1YWxzKHAuTm9tYnJlKTsKCQl9CgkJCgkJcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpCgkJewoJCQlpbnQgaGFzaE5vbWJyZSA9IE5vbWJyZSA9PSBudWxsID8gMCA6IE5vbWJyZS5HZXRIYXNoQ29kZSgpOwoJCQkKCQkJaW50IGhhc2hDb2RpZ28gPSBDb2RpZ28uR2V0SGFzaENvZGUoKTsKCQkJCgkJCXJldHVybiBoYXNoTm9tYnJlIF4gaGFzaENvZGlnbzsKCQl9Cgl9CgkKCWludGVybmFsIGNsYXNzIFBydWViYVByb2R1Y3RvCgl7CgkJc3RhdGljIHB1YmxpYyB2b2lkIE1haW4oKQoJCXsKCQkJUHJvZHVjdG9bXSBwcm9kdWN0b3MgPSB7CgkJCQluZXcgUHJvZHVjdG8geyBOb21icmUgPSAiVGVjbGFkbyIsIENvZGlnbyA9IDMxMDAxfSwKCQkJCW5ldyBQcm9kdWN0byB7IE5vbWJyZSA9ICJLaW5kbGUiLCBDb2RpZ28gPSA5NzAwMX0sCgkJCQluZXcgUHJvZHVjdG8geyBOb21icmUgPSAiTW91c2UiLCBDb2RpZ28gPSA3MjAwNH0sCgkJCQluZXcgUHJvZHVjdG8geyBOb21icmUgPSAiS2luZGxlIiwgQ29kaWdvID0gOTcwMDF9CgkJCX07CgkJCQoJCQkvLyBSZW1vY2nDs24gZGUgZHVwbGljYWRvczoKCQkJSUVudW1lcmFibGU8UHJvZHVjdG8+IHNpbkR1cGxpY2Fkb3MgPSBwcm9kdWN0b3MuRGlzdGluY3QoKTsKCQkJCgkJCWZvcmVhY2ggKFByb2R1Y3RvIHByb2R1Y3RvIGluIHNpbkR1cGxpY2Fkb3MpCgkJCXsKCQkJCUNvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gLSB7MX0iLCBwcm9kdWN0by5Ob21icmUsIHByb2R1Y3RvLkNvZGlnbyk7CgkJCX0KCQl9Cgl9Cn0=