Datapayasadas

julio 17, 2010

Un poquito de Generics

Filed under: .Net, C#, Desarrollo, Generics, Software — Etiquetas: , — pabloide86 @ 1:12 pm

Hola mis queridos List<Amigos>

Hoy vamos a hablar un poco sobre el mundo de los Generics. Vamos derecho al código…

Supongamos que necesitamos un método que devuelve un objeto Persona:

public Persona GetPersonaByID(int idPersona)
{
     var persona = new Persona();
     // Aquí va el codigo para armar el objeto
     return persona;
}

Para llamar a este método lo hacemos de la forma:

Persona objeto = GetPersonaByID(5);

Hasta aquí ninguna novedad. Ahora bien, supongamos que queremos hacer que el mismo método trabaje con cualquier tipo de objetos:

//T: parámetro de tipo
public T GetEntityByID<T>(int idEntity)
{
    // Aquí va el código para armar el objeto. Veremos mas adelante qué necesitamos
    // para instanciar un objeto T
    // ahora se complica un poco mas porque no sabemos bien que tipo de objetos es T
    return entity;
}

Y ahora cuando llamamos a este método le vamos a indicar con qué tipo de objetos tiene que operar:

Persona p = GetEntityByID<Persona>(5);
Ticket t = GetEntityByID<Ticket>(8);
Auto a = GetEntityByID<Auto>(19);

(more…)

julio 11, 2008

Realizando búsquedas simples sobre colecciones

Filed under: C# — Etiquetas: , , — Matías @ 11:18 pm

Buenas,

Hoy voy a contarles un poquito como realizar búsquedas sencillas sobre colecciones genéricas en C#.

Imaginemos que tenemos una clase con la siguiente estructura:

public class Usuario
{
    public string Nombre;
    public string Apellido;
    public int IdUsuario;
}

Ahora, podríamos tener una lista con varias instancias de esa clase, llamemosla usuarios:

List<Usuario> usuarios = new List<Usuario>();

Hasta acá nada loco … entonces, si quisiéramos buscar alguna instancia en particular sobre esa lista, como por ejemplo, el usuario cuyo nombre es Matías podríamos hacer algo así:

Usuario usuario = usuarios.Find(delegate(Usuario u) { return u.Nombre == "Matías"; });

Sencillo, ¿no?

El método Find nos devolvería la primera instancia de entre todos los elementos de la colección que cumpla la condición. ¿Cuál es la condición?: la que le pasamos en el predicado. En este último estamos especificando que recorra la colección de objetos de la clase Usuario, y que referencie como “u” a la instancia actual, es decir, donde se encuentra parado en ese momento.
Luego se verifica que la variable Nombre sea equivalente a Matías, esto devolverá un true o false, y finalmente, si la condición se cumple, entonces finaliza el método devolviendo la instancia actual. Si se recorrió toda la colección sin haber cumplido la condición, entonces se devolverá null.

Bien, ahora supongamos que no solo nos interesa obtener la primer ocurrencia que cumple la condición, sino todas aquellas que lo hagan. Ejemplo: queremos encontrar a todos los usuarios de apellido Perez.

Para ello tenemos el método FindAll, funciona básicamente igual que el anterior, pero en vez de devolver una simple instancia, devuelve una colección:

List<Usuario> sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.Apellido == "Perez"; });

Otro ejemplo: deseamos la lista de todos los usuarios cuyo Id sea menor de 100.

List sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.IdUsuario < 100; });[/sourcecode] Como verán es una forma sencilla y elegante para realizar búsquedas sobre colecciones en C#. Si desean más información sobre estos métodos pueden ir a la página del Microsoft Development Network, mas precisamente en los siguientes enlaces: para el Find y para el FindAll.

Bueno, esto fue “Realizando búsquedas simples sobre colecciones” para Nintendo 64, y espero que le haya gustado. Chau.
LOL

— M

Blog de WordPress.com.