【问题标题】:What is the technically correct term for an instance of class which implements IEnumerable?对于实现 IEnumerable 的类的实例,技术上正确的术语是什么?
【发布时间】:2011-10-10 15:02:37
【问题描述】:

我们称这样的实例为“集合”吗?一个“可数”?或者是其他东西?我的两个主要目标是:

  1. 供其他开发人员理解,无需解释该类实现了IEnumerable
  2. 技术上正确且准确。

【问题讨论】:

  • +1 从来没想过 ;)

标签: c# .net collections terminology ienumerable


【解决方案1】:

我建议“枚举”。

这在技术上意味着枚举的结果,但这通常是 IEnumerable 接口的感知方式。

史蒂夫

【讨论】:

    【解决方案2】:

    ObservableCollection 类称它为“集合”。

        //
        // Summary:
        //     Initializes a new instance of the System.Collections.ObjectModel.ObservableCollection<T>
        //     class that contains elements copied from the specified collection.
        //
        // Parameters:
        //   collection:
        //     The collection from which the elements are copied.
        //
        // Exceptions:
        //   System.ArgumentNullException:
        //     The collection parameter cannot be null.
        public ObservableCollection(IEnumerable<T> collection);
    

    【讨论】:

      【解决方案3】:

      我同意那些建议“enumeratorenumerable”的人,但如果你想要别的东西,术语“sequence”也可以。

      【讨论】:

      • 我不会使用“枚举器”,因为我会假设枚举器实现 IEnumerator,而不是 IEnumerable。我喜欢“序列”。我们经常把Where、Select、Max等方法称为“序列运算符”。
      • 抱歉——我的意思是“可枚举”,但说错了。我的意图是提出“序列”一词,同时表示同意使用“可枚举”一词的人。
      • System.Linq.Enumerable 静态类最初也称为Sequence
      【解决方案4】:

      用“一个 IEnumerable”来调用它是完全合适的。这表明该类实现了 IEnumerable,并且简洁而准确。

      从面向对象的角度来看,这个类是 IEnumerable,所以再次证明这是合理的。

      【讨论】:

      • 感谢您强调接口的 IS 方面。由于接口定义了可替换性,它们表达的是“is-a”而不是“has-a”关系。
      【解决方案5】:

      难点在于IEnumerable和“enumerable”这个词不是名词。你说"something is enumerable",而不是"something is an enumerable"。换句话说,可枚举的对象是您对对象所做的事情,而不是对象本身的定义。

      MSDN 将其描述为:

      IEnumerable - 公开枚举器,它支持对指定类型的集合进行简单迭代。

      准确地说,在记录时我会使用:

      “List 是 System.Int32 值的可枚举集合。”

      【讨论】:

      • 我会避免将术语“collection”应用于仅称为 IEnumerable 的东西,以避免与 Collection 和 ICollection 混淆,而是使用术语“type”、“instance”或者也许适当的“实体”。实际上,对于只知道实现 IEnumerable 的对象来说,最好的术语可能就是简单地称它为“IEnumerable”。我将描述哪个实现了鸭子类型的 GetEnumerator 但没有将 IEnumerable 实现为“for-each-able entity”。
      • @supercat 同意 - 你可能也想避免实体,因为它也有特定的含义。 Instance 意味着一个具体的,它可能是抽象的 - 所以我认为你要么被 Type 困住,要么更冗长。
      • @Basic:也许是听起来相当啰嗦的“东西”?虽然实际上,术语“类型”、“存储位置”、“约束”或“实例”在适用的情况下可能会更好。顺便说一句,值得注意的是,不同种类事物的语义会根据它们是上述哪一种而有所不同。例如,声明为接口类型的存储位置为对象引用分配空间。总是。另一方面,受限于接口的泛型类型的存储位置可能会保存一个结构体。
      • @supercat 我什至没有考虑过 - 你是对的。比乍一看要模糊得多
      【解决方案6】:

      我通常只是说“我有这个 IEnumerable...”,这在工作和 SO 中似乎已经足够了。它清楚地表明我在谈论一个实现 IEnumerable 的类。

      【讨论】:

        【解决方案7】:

        从技术上讲,我会通知开发人员它实现了 IEnumerable。

        说其他的东西信息量少。

        任何了解 IEnumerable 的人都会立即了解您的班级的能力。任何不知道的人,无论你描述的是什么,都不会得到它。

        【讨论】:

          【解决方案8】:

          虽然大多数实现IEnumerable 的类都是集合,但没有具体的术语。一个值得注意的例外是String,但它可以看作是字符的集合...

          【讨论】:

            【解决方案9】:

            没有,所以我会使用“可枚举类型”这个短语。

            集合是包含有限数量的项目的东西。可枚举类型不一定是集合,因为它可以是无限列表。

            列表是具有明确顺序的集合。

            【讨论】:

            • “可枚举类型”太容易与enum 类型混淆,所以我尽量避免。
            【解决方案10】:

            一个“可枚举的”?

            这是一个被广泛接受的答案;我建议不要将其称为集合,因为这可能意味着该对象实现了ICollectionICollection&lt;T&gt;

            【讨论】:

            • 非常精确。 IEnumerable 甚至不能是一个集合,尤其是考虑到 yield 关键字。
            猜你喜欢
            • 2016-04-17
            • 1970-01-01
            • 2015-06-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-09
            • 2011-08-10
            相关资源
            最近更新 更多