2016-07-14 139 views
-1

但是我在C#中有一個代碼不起作用。在foreach中的C#int類型語句

foreach(int CharLength in Char.Length) 
{ 
//Code Here 

} 

但是我得到一個錯誤,說我不能在foreach語句中傳遞一個int類型。

+2

你正在努力實現?'foreach'將集合 –

+2

'foreach'是在迭代只工作通過集合。常見模式將表明'Char.Length'將是一個整數值,而不是一個集合。你確定你試圖迭代正確的事情嗎? –

+2

是的...那個代碼根本沒有意義。 – BradleyDotNET

回答

0

foreach和for循環是不同的,並且運行方式不同。

for循環有三個不同的業務在它的括號,其中的每一個optionnal。

爲(;;)將因此產生一個無限循環一樣,而(真)會。

第一部分的環開始之前完成,並且通常被用來初始化一個索引變量。它在第一次運行前只執行一次。

第二個是一個測試,以確定循環是否應該停止還是繼續。它在每次圍繞循環啓動循環體時執行,包括第一次。

第三是每個測試操作被計算之後的循環結束時完成的操作。

foreach原理不同,只有一個單獨的語句。它定義了一個變量thas,它是作用域的(就像上面for循環的第一部分一樣)到循環體。該變量與包含與該變量相同類型的元素的集合配對。然後每次循環開始時,該變量被分配給該集合中的下一個元素。當循環遍歷集合中的所有元素時,循環結束。

此過程被稱爲枚舉集合的元素。對於一個類是可枚舉的(在本解釋中被認爲是一個集合),它必須實現IEnumerable接口。

在你的循環中,它不起作用的原因是你聲明瞭一個int類型的變量,並試圖枚舉Char.length返回的集合,它本身是int但不是IEnumerable。

我希望這有助於解釋爲什麼編譯器似乎對它抱怨很多。

0

System.Int不執行IEnumerable接口,這是你無法在foreach循環中傳遞int的原因。任何實現IEnumerable的類都可以使用foreach進行迭代。在你的情況下,Char.Length是一個整數,不能迭代,因此編譯器會拋出錯誤。希望它清楚。

3

什麼,你可能尋找的是

// Enumerable.Range gives you 1,2,3,...Char.Length 
foreach(int CharLength in Enumerable.Range(1, Char.Length)) 

// this sets CharLength to 0, 1, 2, ... CharLength-1 
for(int CharLength = 0; CharLength < Char.Length; CharLength++) 
+2

老兄非常感謝,就像我無法強調這是多麼有幫助,這正是我在找的東西。對不起,如果這是一個惱人的問題,我仍然是新來的C#我剛剛從掌握Python和我雖然語法是相同的。 –

+0

沒問題。無論如何,我認爲Enumerable.Range基本上是從Python複製的 –