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 :

Sortir d'un ForEach


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Par défaut Sortir d'un ForEach
    Salut,
    Dans une liste de contrat, je dois sortir dès j'ai trouvé un contrat en cours. Cependant j'ai une erreur me disant :
    Absence de boucle englobant 'break' ou 'continue'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bool bOk=false;
    oPers.colContrats.ForEach(delegate(cContrat c)
    {
        if (c.DateEntree <= DateTime.Now & DateTime.Now <= c.DateFin)
        {
            oPers.Load(p, ref lisPers);
            bOk=true;
        }
        if (bOk == true)  break; //erreur sur ce Break
    });
    Ca doit pas être bien compliqué mais je vois pas le problème

  2. #2
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Par défaut
    Bonjour,

    Je pense que le break ne fonctionne pas car il est dans une méthode ForEach.

    Pourquoi ne pas voir les choses légèrement différemment, en récupérant le premier élément correspondant à votre test et ensuite appeler la méthode Load ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cContrat contrat = oPers.colContrats.Fisrt(c => c.DateEntree <= DateTime.Now && DateTime.Now <= c.DateFin )
    if(contrat != null)
    	oPers.Load(p, ref lisPers);

  3. #3
    Invité
    Invité(e)
    Par défaut
    Techniquement t'es pas dans une boucle foreach, mais une méthode Foreach qui utilise un delegate. Tu dois pouvoir le réécrire comme ça (au passage je ne vois pas l'intérêt du booléen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach(var c in oPers.colContrats)
    {
        if (c.DateEntree <= DateTime.Now & DateTime.Now <= c.DateFin)
        {
            oPers.Load(p, ref lisPers);
            break;
        }
    });
    Ca c'est si tu veux utiliser foreach.
    Mais t'as la solution de ostenhard qui est plus élégante : tu utilises la méthode first qui te renvoie le premier élément satisfaisant la conditition en paramètre.

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Par défaut
    Merci bcp pour vos réponses il est vrai que j'ai toujours bêtement fait mes boucles comme cela.. (j'avoue même sans me pencher sur l'utilisation du Delegate)

  5. #5
    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 Gastiflex Voir le message
    Mais t'as la solution de ostenhard qui est plus élégante : tu utilises la méthode first qui te renvoie le premier élément satisfaisant la conditition en paramètre.
    Plutôt SingleOrDefault que First car First va lever une exception si la condition n'est pas rencontrée.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Par défaut
    Tiens d'ailleurs si je mettais First, il me retournait :
    'System.Collections.Generic.List<cContrat>' ne contient pas une définition pour 'Fisrt' et aucune méthode d'extension 'Fisrt' acceptant un premier argument de type 'System.Collections.Generic.List<cContrat>' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)
    En remplacant First par SingleOrDefault , nickel

  7. #7
    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 toss.net Voir le message
    Tiens d'ailleurs si je mettais First, il me retournait :
    'System.Collections.Generic.List<cContrat>' ne contient pas une définition pour 'Fisrt' et aucune méthode d'extension 'Fisrt'
    Oui, pour 'Fisrt' ce n'est pas étonnant; mais peut être que avec First ça marche mieux

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 338
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Oui, pour 'Fisrt' ce n'est pas étonnant; mais peut être que avec First ça marche mieux

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

Discussions similaires

  1. sortir d'une boucle foreach
    Par yacine.dev dans le forum Struts 1
    Réponses: 2
    Dernier message: 22/02/2010, 15h39
  2. Sortir d'un foreach
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 11/10/2009, 09h08
  3. [PHP 5.2] Foreach - Problème pour sortir des variables
    Par Donald08 dans le forum Langage
    Réponses: 6
    Dernier message: 26/01/2009, 15h21
  4. Sortir d'un foreach quand le if est correct
    Par parano dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2007, 10h02
  5. Réponses: 1
    Dernier message: 11/03/2006, 21h19

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