Foreach 迴圈

foreach 將迭代實現 IEnumerable 的類的任何物件(請注意 IEnumerable<T> 繼承自它)。這些物件包括一些內建的,但不限於:List<T>T[](任何型別的陣列),Dictionary<TKey, TSource>,以及 IQueryableICollection 等介面。

句法

foreach(ItemType itemVariable in enumerableObject)
    statement;

備註

  1. ItemType 型別不需要匹配專案的精確型別,只需要根據專案型別進行分配
  2. 除了 ItemType 之外,還可以使用 var,它將通過檢查 IEnumerable 實現的泛型引數來推斷 enumerableObject 中的項型別
  3. 該語句可以是塊,單個語句甚至是空語句(;
  4. 如果 enumerableObject 沒有實現 IEnumerable,程式碼將無法編譯
  5. 在每次迭代期間,當前專案被強制轉換為 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();
}