枚举器

1、可枚举的类型必须实现IEnumerable和IEnumerator接口
2、枚举器实现了IEnumerator接口,它迭代Object类型,会有如下问题
  1、值类型的装箱和取消装箱操作降低了性能
  2、向下类型转换(从父类型到子类型)到引用类型也要付出少量的性能代价
  3、频繁的装箱操作会使托管堆空间紧张
  4、大型值类型集合的装箱也会使托管堆空间紧张
  5、需要与System.Object之间的类型转换,这并非是类型完全安全的
3、迭代器
  yield语句
  语法:yield return expresssion  yield break
  迭代器块
  迭代器块是维护迭代之间的枚举器的状态机
  事件处理程序、构造函数和析构函数不能成为迭代器
  迭代器块不能再匿名方法中使用,迭代器块不能包含在一个带有catch处理程序的try块中
  迭代器块不能放在一个finally块中
  迭代器函数的限制
  迭代器方法必须返回一个IEnumerable或一个IEnumerator接口
  迭代器方法不能有ref参数
  迭代器方法不能有out参数
  迭代器方法不能是不安全的
  迭代器的本质
  C#编译器将迭代器实现为嵌套类,该嵌套类维护当前枚举数的状态
  迭代器是由语言编译器创建的,而不是由公共语言运行时(CLR)创建的
  迭代器实例
  双重迭代
  反向迭代
  临时集合
  复杂迭代
  

你可能感兴趣的:(枚举)