IEnumerable踩过的坑
1.
查询接口:建议使用IEnumerable
更新、创建接口:不要使用IEnumerable(maybe 接口会重复调用);建议使用可以讲结果保存到内存中的类型(like:IList、IDictionary)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | var result = _serviceItemConsumeRecordSvc.Add(consumeResult).ToList(); //if _serviceItemConsumeRecordSvc.Add return as IEnumerable<object> //warn,first call Add():result.Any() if (result == null || !result.Any()) { var msg = $ "no serviceItemConsumeRecord can be added" ; _loger.Warn(msg, consumeResult ); yield return new SPOSpendingActionResponseItem() { Sucess = false , Message = msg }; continue ; } #endregion #region return //warn,second call Add(): foreach (var itemResult in result) foreach ( var itemResult in result) { //…… } #endregion |
2.
foreach 循环中 yield return 之后,记得添加:continue
非 foreach 循环中 :返回 yield break;(yield return null之后,后续代码仍旧会执行)
1 2 3 4 5 6 7 8 9 10 11 12 13 | public IEnumerable<SPOUsedSearchExtendResponseItem> UsedRecordFullSearch(SPOUsedSearchExtendRequest req) { var usedRecords = UsedRecordsSearch(req); if (usedRecords == null || usedRecords.Data == null || !usedRecords.Data.Any()) { //warn :use "yield break" instead of "yield return null"(; //otherwise [ var consumerRecordLK = usedRecords.Data.ToLookup(_ => _.ProduceRecordNumber);] will execute yield break ; } var consumerRecordLK = usedRecords.Data.ToLookup(_ => _.ProduceRecordNumber); //…… } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #region return foreach ( var itemResult in result) { if (!itemResult.IfSuccess || itemResult.SICRs == null || !itemResult.SICRs.Any()) { yield return new SPOSpendingActionResponseItem() { Sucess = itemResult.IfSuccess, SICR = itemResult.SICRs!= null ? itemResult.SICRs.ToList(): null , Message = itemResult.Message }; // warn: // if: in foreach, yield return & not end continue // then:【 var produceRecordNumbers = itemResult.SICRs.Select(_ => _.ProduceRecordNumber); 】will execute,instead of skip to foreach continue ; } var produceRecordNumbers = itemResult.SICRs.Select(_ => _.ProduceRecordNumber); //…… } #endregion |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
2018-04-18 微服务架构与实践7_监控与告警
2018-04-18 微服务架构与实践6_日志聚合