我正在寻找尽可能通用的某些功能。这是过度使用扩展方法吗?
在我的MVC应用程序我有一些复杂的IEnumerable对象转换为SelectLists的下拉列表显示等
起初,我创建了每个复杂对象的转换方法的静态列表类。这相当于很多代码。接下来我开始使用LINQ语句来执行转换:
var list = (from o in SessionTypes select new SelectListItem { Value = o.ID.ToString(), Text = o.Title }).ToList();
但同样,当接管了许多这样的转换,这仍然是一个很大的代码。
我终于尘埃落定类似于:
public IEnumerable<SelectListItem> ToSelectList<T>(IEnumerable<T> enumerable, Func<T, string> value, Func<T, string> text)
{
return enumerable.Select(f => new SelectListItem()
{
Value = value(f),
Text = text(f),
});
}
,并使其更容易使用,我做了一个扩展方法:所以现在
public static IEnumerable<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> value, Func<T, string> text)
{
return enumerable.Select(f => new SelectListItem()
{
Value = value(f),
Text = text(f),
});
}
,所有我需要做的就是:
var list = SessionTypes.ToSelectList(o => o.ID.ToString(), o => o.Title) as List<SelectListItem>;
我也有类似的方法,如.ToDictionary。
这是过度使用扩展方法吗?我担心我将很多代码隐藏在可能会扭曲我的模型的扩展方法中,使用linq转换进行透明度会更好吗?
谢谢!我有点不高兴使用SeletListItem,所以我改变了扩展方法来返回IEnumerable>,这让我有点高兴,因为它暴露给IEnumerable的所有实例。 –