如何将这段C#代码中的foreach循环改写为LINQ实现?
改写为LINQ实现
当然可以用LINQ改写这段代码,还能优化原逻辑的效率——原代码先做一次全集合检查(Any),再遍历全集合修改匹配项,相当于两次遍历。用LINQ过滤出需要修改的项后直接处理,只需一次遍历:
方案1:结合LINQ过滤与List.ForEach
如果ObjectSearchFilterDetails是List<T>类型,可以用以下方式:
frameAndExportRequest.SearchObjectRequest.ObjectSearchFilterDetails .Where(field => field.FieldName == "APPROVED_BY_USER_NAME") .ToList() .ForEach(field => field.FieldName = "APPROVED_BY_USER");
Where:过滤出所有需要修改的字段,只处理匹配项ToList():将LINQ查询结果转为List,因为IEnumerable<T>没有ForEach方法ForEach:对每个匹配字段执行修改操作
方案2:用LINQ过滤后简化foreach
如果你更倾向于保留foreach语句但去掉冗余检查,也可以直接遍历LINQ过滤后的结果:
foreach (var field in frameAndExportRequest.SearchObjectRequest.ObjectSearchFilterDetails .Where(field => field.FieldName == "APPROVED_BY_USER_NAME")) { field.FieldName = "APPROVED_BY_USER"; }
这种方式去掉了原代码中的Any判断和内部的if条件,逻辑更简洁,且只遍历需要修改的项。
注意:LINQ本身的设计初衷是查询而非执行副作用(比如修改对象属性),但上述两种方式都是实践中常用的简化写法,既利用了LINQ的过滤能力,又完成了修改需求。
内容的提问来源于stack exchange,提问作者Nirmal Thomas
相关产品推荐
相关产品推荐

