Una pregunta acerca de IEnumerator.GetEnumerator en C #
-
03-10-2019 - |
Pregunta
Tengo una pregunta acerca del método IEnumerator.GetEnumerator()
.
public class NodeFull
{
public enum Base : byte {A = 0, C, G, U };
private int taxID;
private List<int> children;
public int TaxID
{
get { return taxID; }
set { taxID = value; }
}
public int this[int i]
{
get { return children[i]; }
set { children[i] = value; }
}
public IEnumerator GetEnumerator()
{
return (children as IEnumerator).GetEnumerator();
}
public TaxNodeFull(int taxID)
{
this.taxID = taxID;
this.children = new List<int>(3);
}
}
Cuando intento compilar, mensaje de error dice
'System.Collections.IEnumerator' no contiene una definición para 'GetEnumerator' y ningún método de extensión 'GetEnumerator' aceptar un primer argumento de tipo 'System.Collections.IEnumerator' se podía encontrar (¿falta una directiva using o una referencia de ensamblado?)
¿Hay algo mal con el código?
Gracias de antemano
Gracias chicos. Lo tengo.
Solución
Es IEnumerable.GetEnumerator()
(o IEnumerable<T>.GetEnumerator()
), no IEnumerator.GetEnumerator()
. Los miembros de IEnumerator
son MoveNext()
, Current
y Reset()
(y Dispose
para la versión genérica). El IEnumerable
es "algo que puede ser iterado sobre" (lista por ejemplo a) y el IEnumerator
representa el estado actual dentro de esa iteración -. Como un cursor de base de datos
Es un poco extraño que su clase no implementa IEnumerable
o IEnumerable<T>
sí. Me esperaba algo como esto:
class NodeFull : IEnumerable<int>
{
... other stuff as normal ...
public IEnumerator<int> GetEnumerator()
{
return children.GetEnumerator();
}
// Use explicit interface implementation as there's a naming
// clash. This is a standard pattern for implementing IEnumerable<T>.
IEnumerator IEnumerable.GetEnumerator()
{
// Defer to generic version
return GetEnumerator();
}
}
Otros consejos
niños es List<int>
, que implementa IEnumerable<int>
y IEnumerable
. El método GetEnumerator()
se define para esas interfaces, no para IEnumerator
.
children as IEnumerator
debería dar como resultado nulo.
No hay ningún método GetEnumerator()
en la IEnumerator interfaz. ¿Estás tratando de utilizar la interfaz IEnumerable tal vez?