IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Differences entre foreach et enumerator


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut Differences entre foreach et enumerator
    Bonjour,

    J'aimerai savoir si qulequ'un connait la difference entre un foreach et un enumerator. Afin de parcourir des collections, j'utilise 2 genres de methodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IEnumerator EnumDataRows = this.dS_Parameter.T_PARAMETER.Rows.GetEnumerator();
     
    while (EnumDataRows.MoveNext())
    {
        LMA_DataSets.DS_Parameter.T_PARAMETERRow MyRow = (LMA_DataSets.DS_Parameter.T_PARAMETERRow)EnumDataRows.Current;
     
        MessageBox.Show(MyRow.PARAMETER_NAME);
     
    }

    Ou alors:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach (DataGridViewRow MyRow in this.dgv_Parameters.Rows)
    {
        if (MyRow.IsNewRow == false)
        {
            CurrentSeqNo++;
            RowsToRenumber.Add(MyRow.Cells["PARAMETER_ID"].Value, CurrentSeqNo);
        }
    }
    Quelle est la meilleure solution en termes de rapidite et de securite selon vous ?

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    L'énumérateur te permet de faire des choses un peu casse-pieds à programmer avec le foreach; par exemple examiner une n-ième valeur et en fonction de celle ci déterminer quel comportement devra avoir ta routine avec la n+1-ième, puis lire la n+1-ième.

    Mais les deux bouts de code que tu postes sont équivalent. A priori, je pense que le foreach est peut être un chouia plus performant, mais je ne me suis jamais posé la question en ces termes, plutôt dans le sens inverse : je ne peux pas - ou difficilement- faire avec foreach, ergo je fais avec Enumerator.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    A mon avis, il faut un IEnumerator pour utiliser foreach.

    En effet, lorsqu'on crée une classe collection de A à Z et pour pouvoir utiliser foreach, il faut que la classe implémente IEnumerable qui nécessite l'implémentation de IEnumerator GetEnumerator().

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    A mon avis, il faut un IEnumerator pour utiliser foreach.

    Il est clair qu'en interne, c'est ce qu'il utilise; mais de là à dire que c'est plus performant de l'appeler explicitement, je ne sais pas.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Il suffirait de regarder le MSIL, mais à mon avis, le compilateur traduit foreach en while.

  6. #6
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Donc le foreach utilise l'enumerator implicitement...

    Conclusion ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. La difference entre XSL et XSLT?
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2003, 15h14
  3. Difference entre fenetre et boite de dialog
    Par billyboy dans le forum Windows
    Réponses: 2
    Dernier message: 02/06/2003, 15h43
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo