2015-12-12 74 views
1

所以我一直试图把这个代码变成每个代码,但是我一直在遇到问题,而且我并不确定如何去做,我所做的唯一的工作就是一个小代码,但它重复了好几次,我还是C#的新手,并且使用for(),所以我并不真正理解要做什么。对不起,这是如此的新颖,我感谢所有我能得到的帮助!将一个(;;)循环变成一个foreach

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; 
} 
+0

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

回答

8

你有你的具体问题回答了,但不是“更普遍的问题,我怎么把一个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

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