如图
foreach的语法 很简单 但是里面的原理还是挺复杂的
想想以前都是数组 列表 字典 用foreach 来遍历的
重来没有遍历过一个自己定义的一个类 那能不能遍历了?
我们建立一个类 叫所有的员工类
里面就一个list
然后employ类里面有name age
(准备工作)
然后我们foreach员工管理类
肯定报错 错误为
缺少get迭代器的方法
发现这是接口 实现接口IEnumerable的方法
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
要返回一个 IEnumerator 一看是个接口我们新建一个类来继承IEnumerator
看看里面有些东西
发现里面有
看方法名字 就猜的差不多了推出
然后介绍一下foreach 原理
完整的代码如下
class Program
{
static void Main(string[] args)
{
//新建一个管理类 并在里面赋值
EmployManger employ = new EmployManger
{
employs = new List<Employ>()
{
new Employ(){name="张三"},
new Employ(){name="立式"}
}
};
//foreach (var item in employ)
//{
//}
//foreach原理 第一获取方法
IEnumerator enumerator = employ.GetEnumerator();
//找到下个元素
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
Console.ReadLine();
}
}
public class EmployManger:IEnumerable
{
public List<Employ> employs;
public IEnumerator GetEnumerator()
{
return new EmployEnumerable() { targets = employs };
}
}
public class EmployEnumerable : IEnumerator
{
public List<Employ> targets;
int index=-1;
//当前的数据
public object Current{ get { return targets[index].name; } }
//下一个数据存在吗
public bool MoveNext()
{
index++;
return index <= targets.Count - 1;
}
public void Reset()
{
throw new NotImplementedException();
}
}
public class Employ
{
public string name;
}
不过这种设计模式可以画如下的图