在 C# 中,IEnumerator接口定义了一种遍历集合并查看元素的方法。我认为这非常有用,因为如果您传递IEnumerable<T>给一个方法,它不会修改原始源代码。
但是,在 Java 中,Iterator将删除操作定义为(可选!)允许删除元素。Iterable<T>传递给方法没有任何优势,因为该方法仍然可以修改原始集合。
remove的可选性是拒绝遗赠气味的一个例子,但忽略这一点(已经在这里讨论过)我会对促使remove事件在接口上实现的设计决策感兴趣。
导致remove被添加到的设计决策是Iterator什么?
换句话说,明确没有remove定义的 C# 设计决策是IEnumerator什么?