【问题标题】:Turning a for(;;) loop into a foreach将 for(;;) 循环变成 foreach
【发布时间】:2015-12-12 23:52:16
【问题描述】:

所以我一直在尝试将这些代码转换为 for each,但我一直遇到问题,而且我不太确定该怎么做,我所做的唯一可行的事情是一个小代码,但它重复了好几次,我对 C# 和使用 for() 还是很陌生,所以我不太明白该怎么做。很抱歉,我对此如此陌生,我很感激我能得到的所有帮助!

double[] numbers = new double[9.7, 2.2, 4.3, 1.7, 5.6, 3.6, 4.5, 1.3, 4.6, 3.0];

static double ComputeSum(double[] array)
{
    double sum = 0;
    int intCounter;

    for (intCounter = 0; intCounter < array.Length; intCounter++)
    {
        sum += array[intCounter];
    }
    return sum;
}

static double ComputeAverage(double[] array)
{
    return ComputeSum(array) / array.Length;
}

【问题讨论】:

  • 如果使用 IEnumerable.Sum() 扩展,则不需要 for 循环(或 foreach),因为循环已经在 Sum 方法中。

标签: c# .net loops for-loop


【解决方案1】:

您的具体问题得到了回答,但没有回答“如何将for 循环变成foreach?”这样更一般的问题?

让我们看看你的循环,用一些更好的命名。 (不要根据 C# 中的类型来命名。根据含义来命名。)

        for (index = 0; index< array.Length; index++)
        {
            sum += array[index];
        }

最重要的是你理解这个循环所代表的想法。表面水平读数是“对于该数组中的每个有效索引,获取与该索引关联的元素值并将其添加到总和中”。但我们可以让它更抽象一点。我们也可以说循环意味着“对于集合中的每个元素,将其添加到总和中”。

这是for 循环和foreach 循环之间的主要区别。 for 循环集中在 index 上,您通过索引获取值。 foreach 循环专注于值本身,根本不考虑索引。

知道我们现在可以了解如何将for 转换为foreach。首先找到作为值的位,并为其创建一个变量:

        for (index = 0; index < array.Length; index++)
        {
            var item = array[index];
            sum += item;
        }

现在我们看到循环体几乎可以完全用对项目的操作来表示,而不是在索引上。然后我们将其翻译成foreach

        foreach (var item in array)
        {
            sum += item;
        }

所有处理索引的东西都会被删除。如果你发现你不能删除所有处理索引的东西,那么你可能不应该使用foreach

【讨论】:

    【解决方案2】:

    由于foreach 循环将集合的元素一一呈现给您的代码,因此您需要做的就是

    foreach (double num in Numbers)
    {
        sump += num;
    }
    Console.WriteLine("{0}", sump);
    

    您还可以使用Sum 扩展方法来完全消除循环结构:

    var sump = Numbers.Sum(); // <<== The loop is hidden inside the Sum() method
    Console.WriteLine("{0}", sump);
    

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 2020-08-11
      • 1970-01-01
      • 2018-03-05
      • 2023-03-28
      • 1970-01-01
      • 2022-06-14
      • 2021-03-12
      • 1970-01-01
      相关资源
      最近更新 更多