Estoy buscando la mejor manera de hacer posible obtener un elemento aleatorio de una lista donde las T serán objetos de diferentes tipos que no están relacionados a través de una clase base.Seleccionar al azar de listas genéricas con <T>
He estado buscando crear un método de extensión para List, o un método de ayuda que recibe una lista, pero no he podido juntarlo. Cada vez que me he encontrado con problemas para manejar una T, no sé qué es.
¿Es posible hacer esto sin hacer una interfaz o una clase base? Porque no veo ninguna forma significativa de implementar una clase base o interfaz para las diferentes "T".
Saludos Jesper Hauge
Después de leer un poco más acerca de los métodos genéricos que logró escribir algo de código a mí mismo. Esta es mi solución:
public static class ListExt
{
public static T RandomItem<T>(this List<T> list)
{
if (list.Count == 0)
return default(T);
if (list.Count == 1)
return list[0];
Random rnd = new Random(DateTime.Now.Millisecond);
return list[(rnd.Next(0, list.Count))];
}
}
Se trata de un método de extensión que permite la selección de un artículo al azar de cualquier lista con el siguiente código:
private Picture SelectTopPic()
{
List<Picture> pictures = GetPictureList();
return pictures.RandomItem();
}
Por qué no hacer una función que obtiene una lista y devuelve una T con tan solo seleccionar el elemento enésimo donde n es un número entre 0 y la longitud de la lista? –
Probablemente no le expliqué claramente cuál era mi problema, pero encontré una solución que me convenía: agregué mi código a la publicación. Gracias por responder/comentar – Hauge