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