На практике это кажется простым, но я очень запутался в этом. Перечисление Java hasMoreElements() и методы nextElement() связаны друг с другом, но работают иначе, чем свойства IEnumerator MoveNext() и Current() класса C#, конечно. Но как бы я перевожу что-то вроде этого ?:Перечисление Java переводится на C# IEnumerator
//class declaration, fields constructors, unrelated code etc.
private Vector atomlist = new Vector();
public int getNumberBasis() {
Enumeration basis = this.getBasisEnumeration();
int numberBasis = 0;
while (basis.hasMoreElements()) {
Object temp = basis.nextElement();
numberBasis++;
}
return numberBasis;
}
public Enumeration getBasisEnumeration() {
return new BasisEnumeration(this);
}
private class BasisEnumeration implements Enumeration {
Enumeration atoms;
Enumeration basis;
public BasisEnumeration(Molecule molecule) {
atoms = molecule.getAtomEnumeration();
basis = ((Atom) atoms.nextElement()).getBasisEnumeration();
}
public boolean hasMoreElements() {
return (atoms.hasMoreElements() || basis.hasMoreElements());
}
public Object nextElement() {
if (basis.hasMoreElements())
return basis.nextElement();
else {
basis = ((Atom) atoms.nextElement()).getBasisEnumeration();
return basis.nextElement();
}
}
}
Как вы можете видеть, методы классовой enumration в перегружены, и я не думаю, что замена hasMoreElements и nextElement с MoveNext и тока везде будет работать ... потому что basic.nextElement() вызывает hasMoreElements() снова в инструкции if-else. Если бы я заменил hasMoreElements на MoveNext(), код будет продвигаться дважды, а не один.
Спасибо, могли бы вы быть немного более конкретно? То есть скажите мне, как это работает в контексте кода? – harbm
@harbm - вы должны использовать похожие функции везде, где вы получаете итераторы ... если вы показываете код, который нуждается в итераторах, возможно, его можно будет добавить в контекст. –