He visto algunas muestras del uso de 'T' para hacer que un método sea reutilizable para colecciones genéricas de diferentes clases, pero nunca he entrado en él ni entendido las muestras.¿Cómo refactorizar estos 2 métodos similares en uno?
Me pregunto si sería posible poner los 2 métodos a continuación en uno y cuáles serían los inconvenientes de hacerlo (en cuanto a rendimiento).
¿Alguien?
[NonAction]
public List<SelectListItem> ToSelectList(IEnumerable<Department> departments, string defaultOption)
{
var items = departments.Select(d => new SelectListItem() { Text = d.Code + " - " + d.Description, Value = d.Id.ToString() }).ToList();
items.Insert(0, new SelectListItem() { Text = defaultOption, Value = "-1" });
return items;
}
[NonAction]
public List<SelectListItem> ToSelectList(IEnumerable<Function> functions, string defaultOption)
{
var items = functions.Select(f => new SelectListItem() { Text = f.Description, Value = f.Id.ToString() }).ToList();
items.Insert(0, new SelectListItem() { Text = defaultOption, Value = "-1" });
return items;
}
SOLUCIÓN
La solución que utilicé:
uso
var departmentItems = departments.ToSelectList(d => d.Code + " - " + d.Description, d => d.Id.ToString(), " - ");
var functionItems = customerFunctions.ToSelectList(f => f.Description, f => f.Id.ToString(), " - ");
con
public static class MCVExtentions
{
public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> text, Func<T, string> value, string defaultOption)
{
var items = enumerable.Select(f => new SelectListItem() { Text = text(f), Value = value(f) }).ToList();
items.Insert(0, new SelectListItem() { Text = defaultOption, Value = "-1" });
return items;
}
}
¡Gracias!Esto era lo que estaba buscando en primer lugar. Trataré de implementar el suyo y veré si me gusta trabajar con él –
¡Hola, mi respuesta es idéntica y la publiqué tres minutos antes de esta respuesta, pero esta respuesta obtiene 3 votos y la mía es cero! OK Votaré de todos modos, aunque solo sea para tener los parámetros genéricos para Function en el orden correcto ... – Motti
ToSelectList también se puede convertir en un método de extensión. – idursun