Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
Cómo escribir fuertemente "Actual" al implementar IEnumerator

Estamos implementando IEnumerator e IEnumerable en nuestra clase

 static void Main(string[] args) { ParsingFile data = new ParsingFile(); foreach (var line in data) // Calls the current, the implicit type of line is object but we want is as a DataRow { //call MoveNext } } public class ParsingFile : IEnumerator , IEnumerable { object IEnumerator.Current //need the object to be of type DataRow to avoid casting in foreach { //return a DataRow } public IEnumerator GetEnumerator() { return this; } public bool MoveNext() { //Do something } }

El tipo de retorno de actual es objeto pero desea devolver explícitamente DataRow. Por favor, háganos saber cuál será el enfoque para lograr esto.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Honestamente, a menos que tenga requisitos muy particulares, es mejor que use un bloque iterador aquí, es decir, simplemente escriba:

 public class ParsingFile : IEnumerable<DataRow> { // use an iterator block for the typed API public IEnumerator<DataRow> GetEnumerator() { //Do something that involves, perhaps in a loop // yield return someValue; // and/or // yield break; } // use explicit implementation for the untyped API IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); }

Absolutamente puede implementar su propio enumerador de tipo fuerte, lo que puede (aunque no es estrictamente necesario) significar implementar IEnumerator<T> , pero hay muchas trampas (como permitir la enumeración concurrente independiente) que hacen que sea más seguro dejar el compilador hace el trabajo duro.

over 4 years ago · Santiago Trujillo Denunciar

0

En lugar de implementar un IEnumerator , cuya interfaz especifica que el actual es un objeto, debe implementar IEnumerator<T>

 public class ParsingFile : IEnumerator<DataRow> { public DataRow Current { get; } // rest of code ommited for brevity }
over 4 years ago · Santiago Trujillo Denunciar

0

Como mencionó jon skeet, implemente IEnumerable<DataRow> o IEnumerator<DataRow> en su lugar.

Sugeriría nunca implementar tanto IEnumerator como IEnumerable en la misma clase. Considera lo siguiente:

 var myParsingFile = ... var dr1 = myParsingFile.First(); var dr2 = myParsingFile.First();

En su caso, dr1 y dr2 serían objetos diferentes, y eso es muy confuso.

También puede buscar bloques de iteradores para encontrar una forma más fácil de hacer enumeradores.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda