zoukankan      html  css  js  c++  java
  • IEnumerable踩过的坑

    1.

    查询接口:建议使用IEnumerable

    更新、创建接口:不要使用IEnumerable(maybe 接口会重复调用);建议使用可以讲结果保存到内存中的类型(like:IList、IDictionary)

                    
                    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之后,后续代码仍旧会执行)

            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);
                //……
            }
        
    

      

                    #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
    

      

  • 相关阅读:
    iview modal关闭问题 自动关闭、异步关闭、定时关闭
    关于localStorage和sessionStorage
    promise简单应用
    Vue(JavaScript)按照内容搜索和排序功能实现
    javascripit常用的验证工具
    vue中$refs的用法及作用
    JS遍历数组的三种方法:map、forEach、filter
    Vue项目搭建,Git提交分支,token验证登录流程(重点)
    axios捕获401 赋值token
    Quartus系列:Quartus II 原理图输入设计
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/14673083.html
Copyright © 2011-2022 走看看