2015-12-12 72 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);