大侠门谁能深入的解释一下C# 中的foreach工作原理,谢谢!

2025-03-23 19:36:22
推荐回答(3个)
回答1:

能够进行foreach的类型结构,都必须实现IEnumerable接口。
IEnumerable接口,有一个GetEnumerator的方法,返回一个实现IEnumerator接口的对象。
IEnumerator接口,有Current只读属性,MoveNext方法,Reset方法。

比如类型结构 TestForeach 一个对象tf ,在进行foreach的时候,比如如下:
foreach(var a in tf){
console.writeLine(a.toString());
}
程序运行到var a in tf时,实际上,调用了TestForeach的GetEnumerator()方法,返回一个a,当运行完console.writeLine(a.toString());后,继续运行 var a in tf,其实是调用了 上一次的a.MoveNext()放法,直到a.MoveNext=false foreach运行完毕。

回答2:

foreach用法的格式是这样的 foreach(类型 别名 in 对象集合或数组表达式)
比如
int[] arr = new int[] { 0, 1, 2, 3, 4 };
foreach (int i in arr)
{ Console.Write(i);}
当然 类型也可以是类
DataTable dt= Db.GetTables();//这是一个方法 得到DataTable的
foreach(DataRow dr in dt.Rows)
{
console.write(dr["ID"].tostring());
}

回答3:

与for工作原理一摸一样,都是遍历集合和数组中的元素,但是foreach没有索引.