Foreach 迴圈
foreach 將迭代實現 IEnumerable 的類的任何物件(請注意 IEnumerable<T> 繼承自它)。這些物件包括一些內建的,但不限於:List<T>,T[](任何型別的陣列),Dictionary<TKey, TSource>,以及 IQueryable 和 ICollection 等介面。
句法
foreach(ItemType itemVariable in enumerableObject)
statement;
備註
ItemType型別不需要匹配專案的精確型別,只需要根據專案型別進行分配- 除了
ItemType之外,還可以使用var,它將通過檢查IEnumerable實現的泛型引數來推斷 enumerableObject 中的項型別 - 該語句可以是塊,單個語句甚至是空語句(
;) - 如果
enumerableObject沒有實現IEnumerable,程式碼將無法編譯 - 在每次迭代期間,當前專案被強制轉換為
ItemType(即使未指定,但是通過var進行編譯推斷),如果專案無法投射,則將丟擲InvalidCastException。
考慮這個例子:
var list = new List<string>();
list.Add("Ion");
list.Add("Andrei");
foreach(var name in list)
{
Console.WriteLine("Hello " + name);
}
相當於:
var list = new List<string>();
list.Add("Ion");
list.Add("Andrei");
IEnumerator enumerator;
try
{
enumerator = list.GetEnumerator();
while(enumerator.MoveNext())
{
string name = (string)enumerator.Current;
Console.WriteLine("Hello " + name);
}
}
finally
{
if (enumerator != null)
enumerator.Dispose();
}