java - 使用 IEnumertor 或 IEnumerable c# 接口(interface)?

标签 java c# interface enumeration code-translation

我正在将一些 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)不公开有关枚举当前状态的任何详细信息,例如 CurrentMoveNext ;它只暴露一个 GetEnumerator返回 IEnumerator<T> 的方法给定 IEnumerable<T> 的实现.

因此,它 IEnumerator<T> class 公开如何迭代集合、当前元素以及是否有更多元素的类,类似于 Enumeration Java 接口(interface)。

关于java - 使用 IEnumertor 或 IEnumerable c# 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535476/

相关文章:

java - 将数组的一部分移到Java中的前面

c# - 从字符串转换为唯一标识符时转换失败

ruby - 我怎样才能在 ruby 中达到这个结果?

Delphi:从什么时候开始,接口(interface)引用不再在 with block 末尾释放?

c# - ASP.NET MVC 显示成功消息

c# - 无法将 Lazy<Class> 隐式转换为 Lazy<Interface>

java - 使用复制在 lib 文件夹中的外部 .jar 依赖项构建可执行文件 .jar

java - Android Studio 无法找到有效的 Jvm(与 MAC OS 相关)

java - 如何获取 3G 网络的小区 ID?

c# - UWP - 来自不同样式资源字典的引用 StaticResource : Failed to assign to property 'Windows.UI.Xaml.ResourceDictionary.Source'