C#学习教程:对集合中的所有对象运行一个方法我使用Linq查询检索此集合。参考:Linqselectcertainpropertiestoanotherobject?查询。我想知道是否有可能在返回集合之前在所有新创建的Razzies上运行一个方法,或者甚至在不使用for循环之后立即运行一个方法。我试过这个:Dimresults=FromitemInbloops_SelectNewRazzie()With_{_.FirstName=item.FirstName,_.LastName=item.LastName_}.UpdateAddress(item.Address)但它没有任何回报。Russ,这可能会如你所愿。这是一个非常简单的方法。如果这不是您想要的,请扩展您的问题。这将在您枚举它们时在每个元素上运行该方法。在枚举之前它不会运行该方法,但您可以放心地知道该方法将在您使用数据之前运行。编辑由于您使用的是密封的第3方类,因此请使用扩展方法。这就是他们的目的。;)修改代码以使用扩展方法。classMyArgs{}classRazzie//假装这是我们无法编辑的第3方类{publicstringFirstName{get;放;}publicstringLastName{get;放;}}staticclassRazzieExtensions{publicstaticRazzieMyMethod(thisRazzierazzie,MyArgsargs){razzie.FirstName=razzie.FirstName.ToUpper();返回razzie;}}classProgram{staticvoidMain(string[]args){varbloops=newList{newRazzie{FirstName="name"},newRazzie{FirstName="nAmE"}};varmyArgs=newMyArgs();varresults=fromiteminbloops选择新的Razzie{FirstName=item.FirstName,LastName=item.LastName}.MyMethod(myArgs);foreach(varrinresults)Console.WriteLine(r.FirstName);控制台.ReadKey();在初始处理之后使用foreach循环是执行此操作的正常方法。如果不想使用foreach循环,则需要定义自己的扩展方法来处理这种情况。我不确定你所说的RunVoid是什么意思。Void表示未返回任何内容,但您将结果分配给了一个值。您是否在RunVoid对每个项目执行一个方法,然后返回原始集合?如果是这样,则没有内置方法,但您可以添加一个。PublicFunctionRunVoid(OfT)(sourceAsIEnumerable(OfT),delAsAction(OfT)AsIEnumerable(OfT)ForEachcurinsourcedel(cur)NextreturnsourceEndFunction这样做值得吗?你可以用扩展方法做一些奇特的事情……但是你可能会通过使用扩展方法来执行更新来打破纯度规则……这也会让事情变得难以理解。试试这个:varresults=from...selectnew{Address=item.Address,Razzie=newRazzie{...}}foreach(varresultinresults){result.Razzie.UpdateAddress(result.Address);如果你想抽象出foreach循环,我只是为IEnumerable编写一个扩展方法,它复制List的ConvertAll和ForEach方法,如下所示:publicstaticIEnumerableConvertAll(thisIEnumerablecollection,Converterconverter){if(converter==null)抛出新的ArgumentNullException("转换器");列表列表=新列表();foreach(集合中的T项){list.Add(converter(item));}返回列表;}publicstaticvoidForEach(thisIEnumerablecollection,Actionaction){foreach(Titemincollection){action(item);}}然后就可以调用:有用的和需要了解更多的C#学习教程,希望大家多多关注—bloops.ConvertAll(bloop=>newRazzie(){FirstName=bloop.FirstName,Lastname=bloop.LastName}).ForEach(razzie=>razzie.UpdateAddress());本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
