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 :

Utilisation de foreach


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut Utilisation de foreach
    Bonjour,

    Lorsque j'utilise le foreach avec des tableaux, j'ai parfois besoin de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i = 0;
    foreach (Element e in Elements)
    {
    	Tab[i] = Element.Data;
    	i++;
    }
    A l'intérieur d'une boucle foreach, existe t'il un mot clé représentant ma variable d'incrémentation i ?

    Merci

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Non, il n'y a pas de variable d'incrémentation dans un foreach.

    Après, es-tu obligé d'utiliser un tableau ? Si ce sont des List<T> tu peux écrire ton code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<int> Tab = Elements.ConvertAll<int>(delegate (Element e) { return e.Data; });
    Et Si tu utilises C# 3, tu as Linq à ta disposition, qui permet de l'écrire de façon encore plus concise (mais là, n'ayant pas beaucoup utilisé Linq, je laisse plus compétent que moi te le montrer )

  3. #3
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Pourquoi ne pas utiliser une boucle for tout simplement ?
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut
    Je suis d'accords avec toi dans ce cas la boucle for est plus intéressante. Mais s'il y avait eu une variable d'incrémentation disponible le foreach était mieux.

    @Guulh : Je suis obligé d'utiliser des tableaux mais ta solution est bien plus élégante.

    Merci beaucoup pour vos réponse.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Juste pour info, des solutions possibles avec Linq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Tab = Elements.Select(e => e.Data).ToList();
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var Tab = (from e in Elements
               select e.Data).ToList();
    (exactement équivalent à la version précédente, mais avec la syntaxe de requête)

    Et la solution de Guulh avec la syntaxe C# 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var Tab = Elements.ConvertAll(e => e.Data);
    (pas besoin de spécifier le paramètre de type générique, grâce à l'inférence de type)

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Juste pour info, des solutions possibles avec Linq
    J'ajoute que la List<T> a une méthode ToArray (qui renvoie un T[]), et qu'il existe aussi une méthode d'extension du même nom.

    Mais bon, les tableaux, il y a TRES peu de raisons de continuer à s'en servir. Comme l'a dit un monsieur très intelligent : "In almost every case, there is a better tool to use than an array."
    http://blogs.msdn.com/ericlippert/ar...t-harmful.aspx

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Mais bon, les tableaux, il y a TRES peu de raisons de continuer à s'en servir
    Voici un exemple ou a mon avis (meme si je suis friand des listes, un tableau est plus mieux)

    Je dispose d'une collection de +/- 40.000 elements d'une classe
    Chaque element de cette classe PEUT avoir un tableau de maximum 6 KeyValuePair String,int

    Il me semble que 40.000 Array seront moins couteux que 40000 Listes ?

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

Discussions similaires

  1. [PHP 4] Utilisation de "foreach"
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 22/02/2009, 12h36
  2. prob utilisation c:forEach
    Par skanderb dans le forum JSF
    Réponses: 1
    Dernier message: 27/04/2007, 10h06
  3. Utilisation de foreach avec les sessions sous PHP5
    Par frochard dans le forum Langage
    Réponses: 1
    Dernier message: 11/11/2006, 01h14
  4. [Tableaux] Erreur lors de l'utilisation de foreach
    Par kagura dans le forum Langage
    Réponses: 1
    Dernier message: 08/11/2006, 12h51
  5. utilisation du Foreach.
    Par LESOLEIL dans le forum Langage
    Réponses: 5
    Dernier message: 15/03/2006, 14h26

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