c# – 这是否过度使用扩展方法?
我希望使某些功能尽可能通用.
在我的MVC应用程序中,我必须将许多复杂的IEnumerable对象转换为SelectLists以进行下拉显示等. 首先,我创建了一个静态List类,其中包含每个复杂对象的转换方法.这相当于很多代码.我接下来开始使用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,string> text) { return enumerable.Select(f => new SelectListItem() { Value = value(f),Text = text(f),}); } 为了使它更容易使用,我把它作为一种扩展方法: public static IEnumerable<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable,}); } 所以现在,我所要做的就是: var list = SessionTypes.ToSelectList(o => o.ID.ToString(),o => o.Title) as List<SelectListItem>; 我也有类似的方法,例如.ToDictionary. 这是过度使用的扩展方法吗?我担心我在扩展方法中隐藏了太多代码,这可能会扭曲我的模型,使用linq转换来提高透明度会更好吗? 解决方法
本指南来自C#深度:
只要您在IEnumerable类型的所有实例上公开此扩展方法,那么您就可以了. 在较轻松的说明中,我宁愿将扩展方法称为ToSelectListItem,而不是ToSelectList,以使最终用户清楚.这也是我个人的偏好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |