foreach将迭代实现的类的任何对象IEnumerable(请注意IEnumerable<T>从其继承的对象)。此类对象包括一些内置对象,但不限于:List<T>,T[](任何类型的数组),Dictionary<TKey, TSource>以及诸如IQueryable和ICollection等接口。
语法
foreach(ItemType itemVariable in enumerableObject) statement;
备注
类型ItemType不需要与项目的确切类型匹配,只需从项目的类型进行分配即可
相反的ItemType,可替代地var可使用将推断的物品从enumerableObject键入通过检查的通用参数IEnumerable执行
该语句可以是一个块,一个语句甚至是一个空语句(;)
如果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();
}