-2
實際上,這看起來很簡單,但我對此非常困惑。 Java的枚舉hasMoreElements()和nextElement()方法是相關的,但當然與C#的IEnumerator MoveNext()和Current()屬性的工作方式不同。不過,我會怎麼翻譯這樣的事情?:將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類的方法重載,我不認爲有MoveNext方法和當前無處不在將工作更換的hasMoreElements和nextElement ......因爲basis.nextElement()再次在if-else語句中調用hasMoreElements()。如果我要用MoveNext()替換hasMoreElements,則代碼將前進兩次而不是一次。
謝謝你,你能成爲一個更具體一點?即告訴我這是如何在代碼的上下文中工作的? – harbm
@harbm - 無論你獲得迭代器,你都會使用類似的函數......如果你顯示需要迭代器的代碼,可以將它放在更多的上下文中。 –