C# Foreach循环

示例

foreach将迭代实现的类的任何对象IEnumerable(请注意IEnumerable<T>从其继承的对象)。此类对象包括一些内置对象,但不限于:List<T>,T[](任何类型的数组),Dictionary<TKey, TSource>以及诸如IQueryable和ICollection等接口。

语法

foreach(ItemType itemVariable in enumerableObject)
    statement;

备注

  1. 类型ItemType不需要与项目的确切类型匹配,只需从项目的类型进行分配即可

  2. 相反的ItemType,可替代地var可使用将推断的物品从enumerableObject键入通过检查的通用参数IEnumerable执行

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