【问题标题】:C# enumerator terminology confusionC# 枚举器术语混淆
【发布时间】:2012-04-23 19:47:50
【问题描述】:

在 C# 中,有人告诉我,如果首先将诸如 List(T) 之类的容器类向上转换为诸如 IEnumerable 之类的容器接口,然后随后使用 foreach 对其进行迭代,则将创建运行时垃圾。此外,即使完全沮丧,我也被告知迭代 Collection(T) 也会在堆上创建引用。我知道这是对 GetEnumerator() 的虚拟调用的结果,它可能返回引用或值类型结果。

值类型的 MSDN 文档检查清楚地将所有枚举列为值类型。如果枚举由枚举器列表组成,那么这些枚举器不是按照文档的值类型吗?他们是盒装的吗?还是彼此完全不相关但名称相似?还是完全不同的东西?

我不确定如何统一这两个陈述,我希望有人可以更清楚地向我解释。

谢谢。

编辑:考虑到评论者对使用“从不”和“不必要”等词的建议,对问题进行了改写

【问题讨论】:

    标签: c# .net c#-4.0


    【解决方案1】:

    枚举 (enums) 与枚举数无关。

    还有

    有人告诉我要避免......

    似乎是一个非常不成熟且不必要的优化。

    【讨论】:

    • 如果 foreach 正在执行恒定的运行时分配并且我的堆很复杂,我不能允许发生集合。在带有 XNA/Xbox 360 的 .NET 紧凑型框架下,每次分配 1 兆字节时都会进行一次世界末日的垃圾收集。
    • 你没有提到或标记XNA...默认假设是正常的Fx。
    • 确实,但我的问题与优化无关。只是告诉你我为什么担心它。这种行为不是 XNA 特有的,我认为不需要标记它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多