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