是否有任何在.NET中命名枚举器方法(yield return)的约定?

时间:2013-10-15 08:40:52

标签: .net iterator naming-conventions yield-return

例如,返回Task个对象的方法后缀为“Async”。或者使用IAsyncResult的方法以“Begin”和“End”为前缀。

返回IEnumerable<T>的方法是否有约定?感觉应该有,但我还没有在.NET库中看到任何迭代器方法。

如果答案是“否”,请随意提出建议作为答案的一部分。

2 个答案:

答案 0 :(得分:2)

  

我还没有在.NET库中看到任何迭代器方法

有很多,你只是没有认识到它们是迭代器。这是非常好的设计,它不应该是显而易见的。很多都有明显的名称:GetEnumerator()。适用于充当集合的任何类,它实现IEnumerable&lt;&gt;因此,您甚至看不到名称,因为您使用for each来迭代客户端代码。

Linq扩展方法值得注意,它们都是迭代器。这里的命名约定是根据它们执行的操作选择它们的名称。像Select()和Where()一样,你肯定知道它们。这是基于他们的操作自然映射到一个着名的SQL关键字。怀疑在你自己的程序中有类似的东西。

然后有一堆名为GetXxxs()的地方,其中Xxxs是他们返回的元素名称的复数。

因此,首先考虑GetEnumerator()是否适合该类实现IEnumerable&lt;&gt;。然后选择GetXxxs()。如果你真的想明确它是一个迭代器那么你可以使用EnumerateXxx()。

答案 1 :(得分:0)

没有惯例。它甚至不确定返回IEnumerable的东西实际上是使用yield返回迭代还是只返回实现IEnumerable的已经存在的集合。我也不想要额外的命名方案。