将for(;;)循环转换为foreach

时间:2015-12-12 23:52:16

标签: c# .net loops for-loop

所以我一直在尝试将这些代码转换为每个代码,但我一直遇到问题,而且我并不确定如何做到这一点,这是我唯一能做到的事情。已经完成的工作是一个很小的代码,但它重复了几次,我仍然是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;
}

2 个答案:

答案 0 :(得分:8)

您已经回答了具体问题,但没有更普遍的问题&#34;如何将for循环变为foreach

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

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

最重要的是,您了解此循环所代表的想法。对于此数组中的每个有效索引,表面级别读数为“#34”,获取与该索引关联的元素值并将其添加到总和中。但我们可以使它更抽象一点。我们还可以说循环意味着对于集合中的每个元素,将其添加到总和中。

这是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

答案 1 :(得分:4)

由于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);
相关问题