一直在实际开发中都有用到yield return,但也一直只停留在“用”的层面上,可谓一知半解。今天下班回来自己查证思考了半天,本着自己的原则一切从简提炼了一下几点(正确与否有待进一步学习):
- IEnumerable是对IEnumerator的封装,以支持foreach语法糖。
- IEnumerable<T>和IEnumerator<T>分别继承自IEnumerable和IEnumerator以提供强类型支持(即状态机中的“现态”是强类型)。
- yield return是编译器对IEnumerator和IEnumerable实现的语法糖。
- yield return 表现是实现IEnumerator的MoveNext方法,本质是实现一个状态机。
- yield return能暂时将控制权交给外部,我比作“程序上奇点”,让你实现穿越。能达到目的:延迟计算、异步流。
……