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 :

Syntaxe particulière ForEach


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 187
    Par défaut Syntaxe particulière ForEach
    Bonjour,

    Je reprends actuellement le code de quelqu'un d'autre, et il y a une syntaxe toute bête de ForEach que je n'arrive pas à comprendre. Ca doit être vraiment simple, mais je n'ai pas réussi à trouver de réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach (DataRow dr in myDataTable.Rows)
    {
    	String table = dr["nom_table"].ToString();
    	DataRow[] recherche = clientDataTAble.Select("id = " + id + " AND nom_table LIKE('" + table + "')");
    	if (recherche.Length > 0)
    	{
    		recherche.ToList().ForEach(x => { x["date_maj"] = dr["date_maj"]; });
    	}
    }
    Quelqu'un pourrait il m'expliquer sur ce que fait el ForEach?

    Merci,

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    C'est la façon linq de faire un :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (var item in recherche)
    {
    item["date_maj"] = recherche["date_maj"];
    }
    le x => { x["date_maj"] = dr["date_maj"]; est une lambda expression qui dit (en gros) pour tout object x que je recois, je mets x["date_maj"] à la valeur recherche["date_maj"]

  3. #3
    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 : 43
    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
    Citation Envoyé par GuruuMeditation Voir le message
    C'est la façon linq de faire un :
    Rien à voir avec Linq, c'est une méthode de la classe List<T> qui existe depuis .NET 2.0. D'ailleurs Linq ne fournit pas de méthode ForEach, pour les raisons expliquées ici

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 187
    Par défaut
    Hum et du coup vous auriez un exemple ou un lien avec des explications?

    J'ai regardé le lien MSDN, mais ce n' maide pas vraiment :
    http://msdn.microsoft.com/fr-fr/library/bwabdf9z.aspx

    Merci,

  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 : 43
    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
    En gros, la méthode ForEach prend en paramètre une action qui s'exécute sur chaque élément de la liste. Cette action est fournie sous forme d'un delegate, qui peut éventuellement pointer vers une méthode anonyme (dont les expressions lambda).

    L'expression x => { x["date_maj"] = dr["date_maj"]; } est en fait équivalente à une méthode qui se présenterait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void UneFonction(DataRow x)
    {
        x["date_maj"] = dr["date_maj"];
    }
    En l'occurrence, l'utilisation de la méthode ForEach plutôt que d'une boucle foreach est sans doute une mauvaise idée, vu que ça n'apporte rien et que ça rend le code moins lisible. De plus, ça introduit une "closure" qui capture la variable dr, ce qui implique des changements subtils qui peuvent causer des bugs un peu bizarre. Bref, dans un cas comme ça, une bonne vieille boucle foreach est sans doute plus adaptée...

    Mais il y a des cas où la méthode ForEach peut être pratique, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<string> liste = ...
     
    liste.ForEach(Console.WriteLine);
    Ce code appelle la méthode Console.WriteLine sur chaque élément de la liste.

  6. #6
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Rien à voir avec Linq, c'est une méthode de la classe List<T> qui existe depuis .NET 2.0. D'ailleurs Linq ne fournit pas de méthode ForEach, pour les raisons expliquées ici
    C'est vrai, mea culpa, je vois du linq partout

  7. #7
    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 : 43
    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
    Citation Envoyé par GuruuMeditation Voir le message
    C'est vrai, mea culpa, je vois du linq partout
    Bah, c'est vrai qu'on pouvait facilement s'y laisser prendre avec l'expression lambda pour brouiller les pistes

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 187
    Par défaut
    Merci à vous, c'est plus clair maintenant!

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

Discussions similaires

  1. Syntaxe particulière inconnue
    Par grassel dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 05/10/2012, 17h16
  2. [JNA] Appel fonctions d'une DLL avec syntaxe particulière
    Par akaDev dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/05/2012, 11h11
  3. Réponses: 7
    Dernier message: 13/04/2011, 12h29
  4. [Ocaml]Syntaxe particulière des flots ?
    Par Cooky dans le forum Caml
    Réponses: 1
    Dernier message: 03/04/2007, 16h53
  5. syntaxe particulière dans un $_POST
    Par r-zo dans le forum Langage
    Réponses: 5
    Dernier message: 13/12/2005, 13h34

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