c# - 为什么 C# 中没有反向枚举器?

标签 c# enumerator

有谁知道在 C# 中不包含反向枚举器是否有特定原因或设计决定?如果有 C++ reverse_iterator 的等效项就好了,就像 Enumerator 是 C++ iterator 的等效项一样。可以反向迭代的集合将只实现类似 IReverseEnumerable 的东西,并且可以做类似的事情:

List<int>.ReverseEnumerator ritr = collection.GetReverseEnumerator();
while(rtir.MoveNext())
{
 // do stuff
}

这样,您将能够以相同的方式迭代列表和链表,而不是对一个使用索引器,对另一个使用先前的链接,从而实现更好的抽象

最佳答案

这完全有可能实现。就个人而言,我几乎从不反向迭代。如果我需要这样做,我会先调用 .Reverse() 。可能这也是 .NET BCL 设计者的想法。

All features are unimplemented by default. They need to be designed, implemented, tested, documented and supported. - Raymond Chen

这就是为什么您不实现提供很少效用的功能的原因。你从最重要的特性开始(比如从前到后迭代)。然后您会在预算耗尽或您认为没有继续下去意义的地方停下来。

.NET 基类库中没有的东西很多。在 .NET 4 之前甚至没有 File.EnumerateLines。而且我敢说,对于大多数人来说,这样的功能比逆向迭代更重要。

您可能在反向迭代很常见的业务领域工作。我的经历恰恰相反。作为框架设计者,您只能猜测谁会使用您的框架以及这些人需要什么功能。很难划清界线。

关于c# - 为什么 C# 中没有反向枚举器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9337039/

相关文章:

c# - 使用 C# 将 Config 部分绑定(bind)到 DataTable

c# - 将文本框值传递给 gridview

c# - 错误 130 - 以下方法或属性之间的调用不明确

c# - EPPlus - 从 csv 文件生成 xlsx 文件时为 'Table Table1 Column Type does not have a unique name'

c# - 混合程序集未发现 native DLL

list - 通用 List<> 在哪里实现 Reset?

Ruby:如何设置枚举器的状态?

delphi - 如何实现具有 IsFirst 和 IsLast 函数的枚举器?

python - 替换列表中的所有值而不使用枚举?

ruby - 什么时候枚举器有用?