我有时会发现自己在考虑在提及IEnumerable<Foo>
. 我不认为我在阅读时看到一致的命名。
IEnumerable<Foo>
: 这是一个类型名称。在思考或在句子中使用时没有帮助。
收藏:它是有效的,但不是到处使用。虽然我们有 System.Collections 命名空间。
序列:它也是有效的,并且可能更好地定义它。
Enumerator或Iterator:它们强调操作,很少使用。
什么是最合适的?你在你的代码中读到了什么?
我有时会发现自己在考虑在提及IEnumerable<Foo>
. 我不认为我在阅读时看到一致的命名。
IEnumerable<Foo>
: 这是一个类型名称。在思考或在句子中使用时没有帮助。
收藏:它是有效的,但不是到处使用。虽然我们有 System.Collections 命名空间。
序列:它也是有效的,并且可能更好地定义它。
Enumerator或Iterator:它们强调操作,很少使用。
什么是最合适的?你在你的代码中读到了什么?
AnIEnumerable<Foo>
不是迭代器/枚举器 - 对于迭代它的设备来说,这是一个单独的概念。
集合一般是指允许添加/删除等操作的特定设备;这不适用于这里,但该术语并非不合理。
就我个人而言,我倾向于在讨论中使用“序列”,但我不使用它来命名代码中的事物——我只是使用序列所代表的事物,即“订单”、“唯一用户”等——或者在泛型方法、“项目”、“值”等的情况。
我绝对倾向于sequence。在我看来,一个集合是有限的,一个IEnumerable<Foo>
可以很好地代表一个动态产生的值序列,因此它可能代表一个无限的值序列。
有一个先例以书面形式将其称为“Foo 的 IEnumerable”。例如,此 MSDN 页面引用“XElement 的 IEnumerable”。
口头上我会说“Foo 的 IEnumerable”或“Foo 的 Enumerable”。
到目前为止,描述“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”。
在一个句子(代码)中使用它。
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.
我想我用“一些”作为我的内部发声。可能任何复数词都会起作用。批次,块,束,羊群,过多等。