我正在尋找儘可能通用的某些功能。這是過度使用擴展方法嗎?
在我的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的所有實例。 –