Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

211
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda