如何修复SonarCloud S2971:简化IEnumerable类型LINQ语句
修复SonarCloud S2971规则问题:简化IEnumerable类型LINQ语句
问题根源
你当前代码里的.ToList()是冗余操作,触发了S2971规则:
MyCars refCar = m_service.Cars?.ToList().FirstOrDefault(x => x.Id == car.refId);
FirstOrDefault可以直接作用于IEnumerable<T>类型,不需要先把集合转成List<T>。.ToList()会强制遍历整个集合并在内存中创建完整列表,既浪费内存,又违背了LINQ延迟执行的特性——FirstOrDefault找到匹配项就会停止遍历,而.ToList()必须走完所有元素。
修复后的代码
直接移除.ToList()即可:
MyCars refCar = m_service.Cars?.FirstOrDefault(x => x.Id == car.refId); ... return m_otherService.GetCar(refCar.RefCardId);
补充说明
- 保留
?.空安全运算符,确保m_service.Cars为null时不会抛出空引用异常 - 修复后完全保留原业务逻辑:找到第一个
Id匹配car.refId的MyCars实例,无匹配项则返回null
内容的提问来源于stack exchange,提问作者4est
相关产品推荐
相关产品推荐

