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
    

      

  • 相关阅读:
    CodeForces Gym 100500A A. Poetry Challenge DFS
    CDOJ 486 Good Morning 傻逼题
    CDOJ 483 Data Structure Problem DFS
    CDOJ 482 Charitable Exchange bfs
    CDOJ 481 Apparent Magnitude 水题
    Codeforces Gym 100637G G. #TheDress 暴力
    Gym 100637F F. The Pool for Lucky Ones 暴力
    Codeforces Gym 100637B B. Lunch 找规律
    Codeforces Gym 100637A A. Nano alarm-clocks 前缀和
    TC SRM 663 div2 B AABB 逆推
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/14673083.html
Copyright © 2011-2022 走看看