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