例如,返回Task
个对象的方法后缀为“Async”。或者使用IAsyncResult
的方法以“Begin”和“End”为前缀。
返回IEnumerable<T>
的方法是否有约定?感觉应该有,但我还没有在.NET库中看到任何迭代器方法。
如果答案是“否”,请随意提出建议作为答案的一部分。
答案 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的已经存在的集合。我也不想要额外的命名方案。