J'ai vu des exemples d'utilisation de 'T' pour rendre une méthode réutilisable pour des collections génériques de classes différentes, mais je ne l'ai jamais vraiment compris ou compris les échantillons.Comment refactoriser ces deux méthodes similaires en une seule?
Je me demande s'il serait possible de mettre les deux méthodes ci-dessous en une seule et quels en seraient les inconvénients (en termes de performances).
Quelqu'un?
[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;
}
SOLUTION
La solution que je:
utilisation
var departmentItems = departments.ToSelectList(d => d.Code + " - " + d.Description, d => d.Id.ToString(), " - ");
var functionItems = customerFunctions.ToSelectList(f => f.Description, f => f.Id.ToString(), " - ");
avec
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;
}
}
Merci!C'était ce que je cherchais en premier lieu. Je vais essayer de mettre en place le vôtre et de voir si j'aime travailler avec elle –
Hey ma réponse est identique et posté trois minutes avant cette réponse mais cette réponse obtient 3 votes et le mien zéro! OK Je vais voter de toute façon, si seulement pour avoir les paramètres génériques pour la fonction dans le bon ordre ... – Motti
ToSelectList peut également être fait une méthode d'extension. – idursun