我正在将一些 Java 代码移植到 C#,我的问题是
我的一个 Java 类声明如下所示:
private class PseudoEnumeration implements Enumeration
这个应该翻译成
private class PseudoEnumeration : IEnumerator
或
private class PseudoEnumeration : IEnumerable
为什么每个案例?
另一件事是枚举器类在 Java 和 C# 中的工作方式不同。 Java 有“hasMoreElements”和“nextElement”,而 C# 使用“MoveNext”和“Current”。
如何将这种形式的 Java 函数移植到 C#?
public boolean hasMoreElements() {
return (field.hasMoreElements() );
}
编辑:我知道如果字段没有更多元素,则 MoveNext 返回 Bool。但是,它还会将该字段推进到下一个元素的枚举数。我如何在不推进枚举器的情况下检查它是否有更多元素?
最佳答案
鉴于当前 Enumeration
在 Java 中实现,你应该实现 IEnumerator<T>
class ,这是枚举集合并提供更适合 Java 对应方法的类。
MoveNext
例如返回 bool
枚举中是否真的有下一个值,与hasMoreElements
有关Java的方法Enumeration
.
IEnumerable<T>
接口(interface)不公开有关枚举当前状态的任何详细信息,例如 Current
或 MoveNext
;它只暴露一个 GetEnumerator
返回 IEnumerator<T>
的方法给定 IEnumerable<T>
的实现.
因此,它是 IEnumerator<T>
class 公开如何迭代集合、当前元素以及是否有更多元素的类,类似于 Enumeration
Java 接口(interface)。
关于java - 使用 IEnumertor 或 IEnumerable c# 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535476/