8

我有时会发现自己在考虑在提及IEnumerable<Foo>. 我不认为我在阅读时看到一致的命名。

IEnumerable<Foo>: 这是一个类型名称。在思考或在句子中使用时没有帮助。

收藏:它是有效的,但不是到处使用。虽然我们有 System.Collections 命名空间。

序列:它也是有效的,并且可能更好地定义它。

EnumeratorIterator:它们强调操作,很少使用。

什么是最合适的?你在你的代码中读到了什么?

4

5 回答 5

7

AnIEnumerable<Foo>不是迭代器/枚举器 - 对于迭代它的设备来说,这是一个单独概念

集合一般是指允许添加/删除等操作的特定设备这不适用于这里,但该术语并非不合理。

就我个人而言,我倾向于在讨论中使用“序列”,但我不使用它来命名代码中的事物——我只是使用序列所代表的事物,即“订单”、“唯一用户”等——或者在泛型方法、“项目”、“值”等的情况。

于 2011-09-02T06:50:41.793 回答
6

我绝对倾向于sequence。在我看来,一个集合是有限的,一个IEnumerable<Foo>可以很好地代表一个动态产生的值序列,因此它可能代表一个无限的值序列。

于 2011-09-02T06:49:41.477 回答
2

有一个先例以书面形式将其称为“Foo 的 IEnumerable”。例如,此 MSDN 页面引用“XElement 的 IEnumerable”。

口头上我会说“Foo 的 IEnumerable”或“Foo 的 Enumerable”。

于 2011-09-02T10:10:37.527 回答
1

到目前为止,描述“IEnumerable<Foo>”类型的变量、参数或字段的最清晰、最明确的方法是将其称为“IEnumerable<foo>”、“IEnumerable(Of foo)”或“IEnumerable of富”。作为一名 VB 程序员,我更喜欢中间语法,特别是因为它不使用可能被误认为 HTML 标记的标点符号;总的来说,后一种形式将是最自然的发音(开头的“I”代表它自己的音节),除非在涉及嵌套泛型的情况下,当可能需要其他发音提示来指示精确的嵌套时。

一些实现泛型或非泛型 (*) IEnumerable 接口的类是集合,但有些不是。有些是迭代器;有些不是。因此,术语“集合”和“迭代器”并不是真正合适的,除非人们知道特定的 IEnumerable 实际上是一个集合或迭代器。术语“迭代器”还有一个与术语“序列”相同的问题:并非所有迭代器或序列都实现 IEnumerable;有些实现 IEnumerator,有些实现 GetEnumerator 方法但不实现 IEnumerable(例如,因为他们希望允许“foreach”但不希望承诺 IEnumerable 隐含的所有行为)。如果希望避免使用行话,术语“可重用序列”可能是一个不错的选择。不是很明确,

(*) 从这里开始,术语“IEnumerable”将交替指代 IEnumerable 和 IEnumerable<T>。同样的“IEnumerator”。

于 2011-09-02T14:37:05.153 回答
0

在一个句子(代码)中使用它。

IEnumerable<Foo> myFoos = GetFoos();
  //internal vocalization: get some Foos, assign them to myFoos

我怀疑大多数程序员不会在内部声明变量声明/赋值中的类型。

public IEnumerable<Foo> ProcessFoos(IEnumerable<Foo> source)
  //internal vocalization: The method requires some foos and returns some foos.

我想我用“一些”作为我的内部发声。可能任何复数词都会起作用。批次,块,束,羊群,过多等。

于 2011-09-02T14:43:02.897 回答