但是我在C#中有一個代碼不起作用。在foreach中的C#int類型語句
foreach(int CharLength in Char.Length)
{
//Code Here
}
但是我得到一個錯誤,說我不能在foreach語句中傳遞一個int類型。
但是我在C#中有一個代碼不起作用。在foreach中的C#int類型語句
foreach(int CharLength in Char.Length)
{
//Code Here
}
但是我得到一個錯誤,說我不能在foreach語句中傳遞一個int類型。
foreach和for循環是不同的,並且運行方式不同。
的for循環有三個不同的業務在它的括號,其中的每一個optionnal。
爲(;;)將因此產生一個無限循環一樣,而(真)會。
第一部分的環開始之前完成,並且通常被用來初始化一個索引變量。它在第一次運行前只執行一次。
第二個是一個測試,以確定循環是否應該停止還是繼續。它在每次圍繞循環啓動循環體時執行,包括第一次。
第三是每個測試操作被計算之後的循環結束時完成的操作。
的foreach原理不同,只有一個單獨的語句。它定義了一個變量thas,它是作用域的(就像上面for循環的第一部分一樣)到循環體。該變量與包含與該變量相同類型的元素的集合配對。然後每次循環開始時,該變量被分配給該集合中的下一個元素。當循環遍歷集合中的所有元素時,循環結束。
此過程被稱爲枚舉集合的元素。對於一個類是可枚舉的(在本解釋中被認爲是一個集合),它必須實現IEnumerable接口。
在你的循環中,它不起作用的原因是你聲明瞭一個int類型的變量,並試圖枚舉Char.length返回的集合,它本身是int但不是IEnumerable。
我希望這有助於解釋爲什麼編譯器似乎對它抱怨很多。
System.Int
不執行IEnumerable
接口,這是你無法在foreach
循環中傳遞int的原因。任何實現IEnumerable
的類都可以使用foreach
進行迭代。在你的情況下,Char.Length
是一個整數,不能迭代,因此編譯器會拋出錯誤。希望它清楚。
什麼,你可能尋找的是
// 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++)
老兄非常感謝,就像我無法強調這是多麼有幫助,這正是我在找的東西。對不起,如果這是一個惱人的問題,我仍然是新來的C#我剛剛從掌握Python和我雖然語法是相同的。 –
沒問題。無論如何,我認爲Enumerable.Range基本上是從Python複製的 –
你正在努力實現?'foreach'將集合 –
'foreach'是在迭代只工作通過集合。常見模式將表明'Char.Length'將是一個整數值,而不是一個集合。你確定你試圖迭代正確的事情嗎? –
是的...那個代碼根本沒有意義。 – BradleyDotNET