![]() |
1
7
只要您非常清楚地记录该方法永远不会完成迭代(当然,方法本身返回非常快),那么我认为它是好的。实际上,它可以使一些算法更整洁。我不认为存在任何重要的内存/性能影响-尽管如果您在迭代器中引用一个“昂贵”的对象,那么将捕获该引用。 有很多滥用API的方法:只要你的文档清晰,我认为没问题。 |
![]() |
2
6
代码的使用者,可以 总是 停止枚举(例如使用break或其他方法)。如果枚举器返回无限序列,这并不意味着枚举器的客户机在某种程度上被强制从不破坏枚举,实际上,您不能生成保证由客户机完全枚举的枚举器。
是的,只要您在文档中明确指定枚举器返回和无限序列以及破坏枚举是调用方的责任,一切都应该正常。 返回无限序列不是一个坏主意,函数编程语言已经做了很长时间了。 |
![]() |
3
2
我同意乔恩的观点。编译器将方法转换为实现简单状态机的类,该状态机保持对当前值(即将通过当前属性返回的值)的引用。我多次使用这种方法来简化代码。如果您清楚地记录了方法的行为,它应该可以正常工作。 |
![]() |
4
0
我不会在公共API中使用无限枚举器。C包括我自己在内的程序员太习惯foreach循环了。这也与.NET框架一致;请注意Enumerable.Range和Enumerable.Repeat方法如何使用参数来限制Enumerable中的项数。Microsoft选择使用Enumerable.Repeat(“”,10)而不是Enumerable.Repeat(“”)。Take(10)以避免无限枚举,我将坚持他们的设计选择。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 7 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 7 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 7 月前 |