你怎么称呼IEnumerable <foo>?</foo>

时间:2011-09-02 06:46:23

标签: .net linq ienumerable ienumerator

在引用IEnumerable<Foo>时,我有时会发现自己在想什么词。我不认为我在阅读时会看到一致的命名。

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

收藏:它有效但无处处理。虽然我们有System.Collections命名空间。

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

枚举器迭代器:他们强调操作,很少使用。

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

5 个答案:

答案 0 :(得分:7)

IEnumerable<Foo> 不是迭代器/枚举器 - 这是迭代设备的单独概念。

集合通常是指允许添加/删除等操作的特定设备;这里不适用,但这个词并不合理。

我个人倾向于在讨论中使用“序列”,但我不会在代码中使用它来命名 - 我只是使用序列代表的东西,即“命令” ,“uniqueUsers”等 - 或者在通用方法的情况下,“项目”,“价值”等。

答案 1 :(得分:6)

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

答案 2 :(得分:2)

有一个先例可以将其称为“一个无数的Foo”。例如,this MSDN page引用“IEnumerable of XElement”。

口头上我会说“一个无数的Foo”或“一个可数的Foo”。

答案 3 :(得分:1)

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

实现泛型或非泛型(*)IEnumerable接口的一些类是集合,但有些不是。有些是迭代器;有些不是。因此,术语“集合”和“迭代器”并不真正合适,除非知道特定的IEnumerable实际上是集合或迭代器。术语“迭代器”还有一个额外的问题,由术语“序列”共享:并非所有迭代器或序列都实现IEnumerable;一些实现IEnumerator,有些实现GetEnumerator方法但不实现IEnumerable(例如因为他们希望允许“foreach”但不希望承诺IEnumerable隐含的所有行为)。如果想避免使用行话,术语“可重复使用的序列”可能是一个好词。它不是很明确,因为它可能引用具有GetEnumerator方法但不实现IEnumerable的类,或者可能引用其Reset方法实际重置枚举的IEnumerator对象,但它不包括一次性使用迭代器。

(*)从此处开始的术语“IEnumerable”将指代IEnumerable和IEnumerable&lt; T&gt;。互换。同样“IEnumerator”。

答案 4 :(得分: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.

我想我使用“some”作为我的内部发声。可能任何复数词都可行。批量,大块,束,群,过多等。