Я видел несколько примеров использования «Т», чтобы сделать метод повторно используемым для общих коллекций разных классов, но я никогда не попадал в него или не понимал образцы.Как реорганизовать эти два похожих метода в один?
Интересно, можно ли поместить 2 метода ниже в один и что может означать, что это будет (с точки зрения производительности).
Кто-нибудь?
[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;
}
РЕШЕНИЕ
Решение, которое я использовал:
использование
var departmentItems = departments.ToSelectList(d => d.Code + " - " + d.Description, d => d.Id.ToString(), " - ");
var functionItems = customerFunctions.ToSelectList(f => f.Description, f => f.Id.ToString(), " - ");
с
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;
}
}
Спасибо!Это то, что я искал в первую очередь. Я попытаюсь реализовать ваши и посмотреть, нравится ли мне работать с ним. –
Эй, мой ответ идентичен и отправлен за три минуты до этого ответа, но этот ответ получает 3 голоса и мой ноль! OK Я все равно проголосую, хотя бы для того, чтобы иметь общие параметры для функции в правильном порядке ... – Motti
ToSelectList также можно сделать методом расширения. – idursun