当前位置: 首页 > 编程语言 > C#

如何将这两个相似的方法重构为一个?分享

时间:2023-04-10 19:26:07 C#

如何将这两个相似的方法重构为一个?我已经看到一些示例使用“T”使方法可重用于不同类的泛型集合,但我从未真正了解它或理解示例。我想知道是否可以将下面的两种方法合二为一,这样做的缺点(性能方面)。任何人?[NonAction]publicListToSelectList(IEnumerabledepartments,stringdefaultOption){varitems=departments.Select(d=>newSelectListItem(){Text=d.Code+"-"+d.Description,Value=d.Id.ToString()}).ToList();items.Insert(0,newSelectListItem(){Text=defaultOption,Value="-1"});退换货品;}[NonAction]publicListToSelectList(IEnumerablefunctions,stringdefaultOption){varitems=functions.Select(f=>newSelectListItem(){Text=f.Description,Value=f.Id.ToString()}).ToList();items.Insert(0,newSelectListItem(){Text=defaultOption,Value="-1"});退换货品;}解决我使用的解决方案:使用方法vardepartmentItems=departments.ToSelectList(d=>d.Code+"-"+d.Description,d=>d.Id.ToString(),"-");varfunctionItems=customerFunctions.ToSelectList(f=>f.Description,f=>f.Id.ToString(),"-");同publicstaticclassMCVExtentions{publicstaticListToSelectList(thisIEnumerable可枚举的,Func文本,Func值,字符串defaultOption){varitems=enumerable.Select(f=>newSelectListItem(){Text=text(f),Value=value(f)}).ToList();items.Insert(0,newSelectListItem(){Text=defaultOption,Value="-1"});退换货品;如果你没有实现@Grzenio建议的通用接口,你可以使用像这样的通用方法:=>newSelectListItem(){Text=text(f),Value=value(f)}).ToList();items.Insert(0,newSelectListItem(){Text=defaultOption,Value="-1"});退换货品;}//类似t.ToSelectList(departments,d=>d.Code+"-"+d.Description,d=>d.Id.ToString(),"default");t.ToSelectList(functions,f=>f.Description,f=>f.Id.ToString(),"default");老派的方法是为Department和Function创建一个通用接口:interfaceA{intID{get;}stringDescription{get;}}你在Department上实现Description以返回d.Code+"-"+d.Description并编写函数以使用此接口而不是具体类:[NonAction]publicListToSelectList(IEnumerableas,stringdefaultOption){varitems=as.Select(a=>newSelectListItem(){Text=a.Description,Value=a.Id.ToString()}).ToList();items.Insert(0,newSelectListItem(){Text=defaultOption,Value="-1"});退换货品;编辑:关于使用泛型,在这种情况下它不会有太大帮助,因为实际上,您可以使用泛型和函数的组合来实现它,就像这样(未经测试,甚至可能不会编译)。[NonAction]publicListToSelectList(IEnumerableen,Functiontext,Functionvalue,stringdefaultOption){varitems=en.Select(x=>newSelectListItem(){Text=text(x),Value=value(x)}).ToList();items.Insert(0,newSelectListItem(){Text=defaultOption,Value="-1"});退换货品;然后您可以使用适当的lambda函数分派它(或直接调用它)。以上就是C#学习教程:如何将这两个相似的方法重构为一个?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——[NonAction]publicListToSelectList(IEnumerabledepartments,stringdefaultOption){returnToSelectList(departments,d=>d.Code+'-'+d.Description,d=>d.Id.ToString(),defaultOption);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: