例如,返回Task
对象的方法以“Async”为后缀。或者使用的方法IAsyncResult
以“Begin”和“End”为前缀。
返回的方法有什么约定IEnumerable<T>
吗?感觉应该有,但我没有在 .NET 库中看到任何迭代器方法。
如果答案是“否”,请随意提出一些建议作为答案的一部分。
例如,返回Task
对象的方法以“Async”为后缀。或者使用的方法IAsyncResult
以“Begin”和“End”为前缀。
返回的方法有什么约定IEnumerable<T>
吗?感觉应该有,但我没有在 .NET 库中看到任何迭代器方法。
如果答案是“否”,请随意提出一些建议作为答案的一部分。
我在 .NET 库中没有看到任何迭代器方法
有很多,只是您还没有将它们识别为迭代器。这是一个很好的设计,它不应该是显而易见的。其中很多都有一个明显的名字:GetEnumerator()。适用于任何充当集合的类,它实现了 IEnumerable<>,因此您甚至看不到名称,因为您用于for each
在客户端代码中进行迭代。
Linq 扩展方法值得注意,它们都是迭代器。这里的命名约定是根据他们执行的操作来选择他们的名字。就像 Select() 和 Where() 一样,你肯定知道它们。这是基于它们的操作到众所周知的 SQL 关键字的自然映射。怀疑在你自己的程序中有类似的东西。
然后有一堆名为 GetXxxs() 的它们,其中 Xxxs 是它们返回的元素名称的复数。
因此,如果类适合实现 IEnumerable<>,请首先考虑 GetEnumerator()。然后选择 GetXxxs() 接下来。如果你真的想明确它是一个迭代器,那么你可以使用 EnumerateXxx()。
没有约定。甚至不确定返回 IEnumerable 的东西实际上是在使用 yield return 进行迭代,或者只是返回一个已经存在的实现 IEnumerable 的集合。我也不想要一个额外的命名方案。