当前位置:  开发笔记 > 编程语言 > 正文

枚举器实现:使用struct还是class?

如何解决《枚举器实现:使用struct还是class?》经验,为你挑选了5个好方法。

我注意到List它将枚举器定义为a struct,同时ArrayList将其枚举器定义为class.有什么不同?如果我要为我的班级写一个调查员,哪一个更好?

编辑:我的要求无法使用yield,所以我正在实现我自己的枚举器.也就是说,我想知道是否更好地遵循这些方法List并将其作为结构实现.



1> JaredPar..:

在C#中编写枚举器的最简单方法是使用"yield return"模式.例如.

public IEnumerator Example() {
  yield return 1;
  yield return 2;
}

此模式将生成引擎盖下的所有枚举器代码.这取决于您的决定.



2> Jon Skeet..:

像其他人一样,我会选择一个班级.可变结构是令人讨厌的.(正如Jared建议的那样,我会使用一个迭代器块.手动编码一个枚举器很难做到正确.)

请参阅此线程以获取列表枚举器作为可变结构导致问题的示例...


这个例子的链接已经死了,Way Back Machine也没有帮助.

3> zigzag..:

Reason List使用struct枚举器来防止在foreach语句中生成垃圾.这是非常好的理由,特别是如果您正在为Compact Framework编程,因为CF没有分代GC,CF通常用在低性能硬件上,很快就会导致性能问题.

此外,我不认为可变结构是一些发布的示例中的问题的根源,但是程序员对价值类型的工作原理并不了解.



4> Daniel Earwi..:

用它来写yield return.

至于为什么你可能会在其中选择,class或者struct,如果你把它struct作为一个,那么一旦它作为一个界面返回它就会被装箱,所以使它成为一个struct正好导致进行额外的复制.看不出那一点!


其中强制要求:为什么List 使用结构枚举器?

5> angry person..:

枚举器本质上是一个变化的结构,因为它需要更新内部状态以继续前进到原始集合中的下一个值.

在我看来,结构应该是不可变的,所以我会使用一个类.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有