【问题标题】:Foreach in List returning same records only in different conditions after iterationList 中的 Foreach 仅在迭代后的不同条件下返回相同的记录
【发布时间】:2023-03-26 21:10:01
【问题描述】:

更新:

1.我有一个结果对象,其中包含来自 db 的 100 条数据记录。基于不同的条件,我必须将该记录存储在一个列表中。我将每个记录添加到他们满意的条件循环中。当我看到最终对象时所有 100 条记录都相同。会出现什么问题?

  1. 有没有针对我写的一些入门级代码的相同逻辑的任何重构方法,请建议

我在我的方法中尝试了什么:

       foreach (var data in MainObj)
    {
        if (!String.IsNullOrEmpty(data.RealKey))
        {
            if (data.ResultStatus == "Failed")
            {
                FailedTestCases.Add(data.TestCases);
            }

            if (FailedTestCases.Count > 0)
            {
                alltcPassed = false;
            }
            else
            {
             
                alltcPassed = true;
            }

            if (isValidKey && alltcPassed)
            {
            
               ResultSummary.TestCases = JsonConvert.SerializeObject(FailedTestCases);
                ResultSummary.TestType = data.TestType;
                ResultSummary.ResultStatus = data.ResultStatus;
                result.Add(ResultSummary);

            }
            if (isValidKey && !alltcPassed)
            {
               
                ResultSummary.TestCases = JsonConvert.SerializeObject(FailedTestCases);
                ResultSummary.TestType = data.TestType;
                ResultSummary.ResultStatus = data.ResultStatus;
                result.Add(ResultSummary);

            }
            if (!isValidKey && alltcPassed)
            {
                ResultSummary.TestCases = JsonConvert.SerializeObject(FailedTestCases);
                ResultSummary.TestType = data.TestType;
                ResultSummary.ResultStatus = data.ResultStatus;
                result.Add(ResultSummary);
            }

            if (!isValidKey && !alltcPassed)
            {
               
                ResultSummary.TestCases = JsonConvert.SerializeObject(FailedTestCases);
                ResultSummary.TestType = data.TestType;
                ResultSummary.ResultStatus = data.ResultStatus;
                result.Add(ResultSummary);
            }
        }

      //   this else happen when this condition true the firstone foreach(!String.IsNullOrEmpty(data.RealKey))

        else
        {
            if (data.ResultStatus == "Failed")
            {
                FailedTestCases.Add(data.TestCases);

                
                    ResultSummary.TestCases = JsonConvert.SerializeObject(FailedTestCases);
                    ResultSummary.TestType = data.TestType;
                    ResultSummary.ResultStatus = data.ResultStatus;
                    result.Add(ResultSummary);

            }
            if (data.ResultStatus == "Passed" && FailedTestCases.Count==0)
            {
              
                ResultSummary.TestCases = data.TestCases;
                ResultSummary.TestType = data.TestType;
                ResultSummary.ResultStatus = data.ResultStatus;
                result.Add(ResultSummary);

            }
         
        }
    }
      return  Task.FromResult(result.FirstOrDefault()); //here result having 100 datas but all are same need to get 100 diffrent record
}

【问题讨论】:

  • 为什么不将支票计算的结果存储在某个集合中?或者你应该是 E.g.将 bool 设置为 true,然后循环直到它变为 false,然后停止循环并说“失败”?你的问题相当“大” - 你能准确解释你对什么感到困惑吗?全部大写的段落是对您期望的单个输出值(1、2、3 还是 4)的描述吗?
  • 我必须存储和分配所有通过和失败的测试用例,基于数据键为空或其有效(例如,键像 123 但它无效)

标签: c# .net foreach asp.net-core-3.1


【解决方案1】:

我猜你想把你的List FailedTestCases = new List(); 放在 foreach 循环之外,以便你拥有所有的 FailedTestCases。如果您希望列表包含您的 FailedTestCases 和自定义错误消息。你可以尝试做一个对象列表。 Example

【讨论】:

  • 我尝试了下面的代码。但它为每条记录返回相同的结果。在我编写入门级代码时,任何重构或现代的方式来编写此逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多