【问题标题】:Nested Foreach loop runs too many times - C#嵌套的 Foreach 循环运行次数过多 - C#
【发布时间】:2017-07-24 12:59:46
【问题描述】:

我有 2 个 foreach 循环,其中 1 个嵌套在另一个循环中。 2 个系列共有 115 个项目。我想要做的是将第一个集合中的第一项写入控制台,然后将第二个集合中的第一项写入控制台。回到第一个集合,做第二个项目,以此类推。

我明白为什么嵌套循环会一遍又一遍地运行,我只是不知道如何实现我想要实现的目标。

var Titles = chromeDriver.FindElements(By.CssSelector("div.contentItem__contentWrapper h1"));
var Text = chromeDriver.FindElements(By.CssSelector("div.contentItem__contentWrapper p"));        

foreach (var title in Titles)
{
    string t = title.Text;
    Console.WriteLine($"Title: {t}");
    foreach (var text in Text)
    {
        string p = text.Text;
        Console.WriteLine($"Article Text: {p}");
    }
}

【问题讨论】:

  • 内部foreach中的Text是什么?
  • 两个系列之一? There are 115 total items in 2 collections?
  • 我没猜到 - 我觉得很清楚!
  • 现在它已被搁置为“离题”。 @RodneyWilson 我为这种行为道歉 - 正是因为这个原因,我不再在 SO 上发布太多内容了。

标签: c# loops foreach


【解决方案1】:

您需要知道第一个集合中的哪个项目当前正在使用。最简单的方法是使用forloop..然后您可以从第二个集合中访问正确的项目:

for(int i = 0; i < Titles.Count; i++)
{
   Console.WriteLine($"Title: {Titles[i].Text}");
   Console.WriteLine($"Article Text: {Text[i].Text}");
}

【讨论】:

    【解决方案2】:

    你应该让它成为一个循环并遍历两个集合。

    for (var x = 0; x < Math.Max(Titles.Count, Text.Count); x++)
    {
      if (Titles.Count > x)
      {
        Console.WriteLine($"Title: {Titles[x].Text}");
      }
      if (Text.Count > x)
      {
        Console.WriteLine($"Article Text: {Text[x].Text}");
      }
    }
    

    【讨论】:

    • @DavidG OMG,我现在感觉好蠢!你是绝对正确的。假设它是Min因为这对我来说有点道理:-D
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2023-04-11
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多