将for(;;)循环变成foreach

本文关键字:foreach 循环 for | 更新日期: 2023-09-27 18:26:31

所以我一直试图把的这些代码变成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;
}

将for(;;)循环变成foreach

您已经回答了您的特定问题,但没有回答"如何将for循环转换为foreach

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

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

最重要的是,您要理解这个循环所代表的思想。表面级别的读数是"对于该数组中的每个有效索引,获取与该索引关联的元素值,并将其添加到总和中"。但我们可以把它抽象一点。我们也可以说,循环的意思是"对于集合中的每个元素,将其添加到总和中"。

这就是for循环和foreach循环之间的关键区别。for循环集中于索引,并通过索引获取值。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

由于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);