Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!