begin process at 2012 02 09 01:46:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

"sauter par dessus" un foreach??


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

"sauter par dessus" un foreach??

lundi 13 février 2006 à 19:17:32 | "sauter par dessus" un foreach??

immerczeck

Bonjour!
j'ai de nouveau un petit problème, mais j'avoue, celui-là, je sais plus quoi faire : est ce qu'il pourrait y avoir une raison pour que le programme ignore une énumération foreach?
Je m'explique : j'ai une boucle foreach qui énumère les éléments d'une ArrayList.Synchronized (encore et toujours :p), elle même dans une boucle infinie, et dans un bloc d'instructions conditionnelles. Les éléments de l'ArrayList sont susceptibles d'être modifiées à chaque boucle.
A chaque fois que j'arrive à cet endroit du programme, j'obtiens un résultat aberrant. Je me suis penché sur le code, et, ne trouvant rien, j'ai mis des points d'arrêt aux endroits stratégiques et j'ai exécuté le programme. Surprise : la première fois que la condition est vérifiée, tout se passe bien, j'arrive au point d'arrêt foreach. Mais les fois suivantes, le programme fait comme s'il ignorait l'instruction, et le programme se bloque.

Avez vous déjà rencontré ce genre de problèmes? Est-ce une restriction des ArrayList?
J'espère que quelqu'un pourra me donner une réponse, je n'ai rien trouvé qui ressemble à ce problème...

Merci d'avance

Immerczeck
lundi 13 février 2006 à 19:23:23 | Re : "sauter par dessus" un foreach??

coq

Administrateur CodeS-SourceS
Salut,

Si l'execution du code du corps de l'instruction foreach ne se fait pas, c'est que la collection est probablement vide.



/*
coq
MVP Visual C#
*/
lundi 13 février 2006 à 19:27:22 | Re : "sauter par dessus" un foreach??

immerczeck

ce n'est pas le corps de l'instruction foreach qui ne s'exécute pas, c'est l'instruction foreach (enfin sauf si, lorsque je mets un point d'arrêt à la ligne du foreach, il pointe sur le corps)
lundi 13 février 2006 à 19:30:01 | Re : "sauter par dessus" un foreach??

immerczeck

pardon j'ai oublié de dire que le thread s'arrête après cela, j'ai mis un autre point d'arrêt après les instructions conditionnelles et le programme ne s'y arrête plus passée la première boucle.
lundi 13 février 2006 à 19:36:57 | Re : "sauter par dessus" un foreach??

immerczeck

ha ui heu tout cela sert à vérifier si l'ArrayList ne contient pas un objet dont l'une des propriétés est égale à une valeur.(je ne sais pas si je m'exprime correctement). Je teste donc dans le foreach si cl.name=="valeur".
S'il existe un moyen simple de tester directement la présence de la chaîne dans les propriétés des éléments de l'arraylist, ce serait aussi bien, mais je n'ai trouvé que la méthode Contains, qui traite l'objet entier.

lundi 13 février 2006 à 22:43:55 | Re : "sauter par dessus" un foreach??

coq

Administrateur CodeS-SourceS

Une solution serait d'implémenter ta propre classe de collection fortement typée et de traiter le test de cette propriété dans l'implémentation de ta méthode Contains.
En gros tu déplaces ta boucle :-)
La seule différence étant que tu feras un seul appel de méthode au lieu de c/c ta boucle si tu viens à maintenir une autre liste de clients (c'est bien ça ?) dans ton programme.



/*
coq
MVP Visual C#
*/

vendredi 17 février 2006 à 19:24:41 | Re : "sauter par dessus" un foreach??

immerczeck

merci de ta réponse coq!
désolé pour ma longue absence, de graves pb d'ordi... :p
sinon, est ce que tu pourrais me donner un exemple? Je sais je sais mais je débute :p


vendredi 17 février 2006 à 21:59:12 | Re : "sauter par dessus" un foreach??

immerczeck

en fait le problème ne concernait absolument pas le foreach ;) apparemment cela concerne une instruction receive qui fait planter tout le programme... je vais essayer de faire dans l'asynchrone pour régler ça, mais j'ai encore jamais fait, alors je sais pas si ça va donner quelque chose

vendredi 17 février 2006 à 22:25:12 | Re : "sauter par dessus" un foreach??

coq

Administrateur CodeS-SourceS

Je parlais de quelquechose de ce genre :

public class ClientCollection : CollectionBase
{
 public ClientCollection()
 {
 }

    public int Add(Client cl)
    {
        return base.InnerList.Add(cl);
    }

    public void Remove(Client cl)
    {
        base.InnerList.Remove(cl);
    }

    public Client this[int index]
    {
        get
        {
            return base.InnerList[index] as Client;
        }
    }

    public Client this[string name]
    {
        get
        {
            for ( int i=0; i<base.InnerList.Count; i++ )
            {
                Client current = base.InnerList[i] as Client;
                if ( current.Name == name )
                    return current;
            }

            return null;
        }
    }

    public bool Contains(Client cl)
    {
        return base.InnerList.Contains(cl);
    }

    public bool Contains(string name)
    {
        for ( int i=0; i<base.InnerList.Count; i++ )
        {
            if ( (base.InnerList[i] as Client).Name == name )
                return true;
        }

        return false;
    }
}





/*
coq
MVP Visual C#
*/

samedi 18 février 2006 à 00:17:31 | Re : "sauter par dessus" un foreach??

immerczeck

merci pour le code coq!!
sinon, aurais-tu une idée de la raison pour laquelle un Receive peut se bloquer en attente? comme si la socket était occupée ou quelque chose de ce genre...car c'est cela qui faisait en réalité planter mon programme, et je préfère ne pas poser un autre sujet pour ne pas encombrer le forum

1 2

Cette discussion est classée dans : boucle, programme, arraylist, sauter, foreach


Répondre à ce message

Sujets en rapport avec ce message

sortir d'une boucle foreach [ par yohan49 ] jsute une kestion toute beteje cherche comment on sort d'une boucleen vb.net : exit foren C# : ???? une boucle while dans un service [ par Dr_shaman ] Bonjour, juste une petite question ? J'ai fais un programme en winform C#. Ce programme comporte une boucle qui boucle à l'infini car j'attends des Boucles foreach imbriquées [ par Nawalll ] Bonjour tout le monde, J'ai un problème qui me rend dingue!!! voici mon programme: Code :     ArrayList petiteliste=new ArrayList ();    Array c# ArrayList [ par ghano81 ] salut tout le monde jé un ptit probleme avec les listes en c# ,je ne sais pas comment les utiliser par contre javais pas  c Lancement et Création de Thread [ par skyline86 ] Bonjour, je viens vers vous car j'ai un problème avec mon programme en C#.Je vous explique d'abord de le but du programme :Ce programme doit pouvoir é Mon programme ignore certaines instructions [ par LilBisk ] Bonjour à tous! J'ai un soucis ... Mon programme a un squelette qui ressemble à ça : [code=cs] static void Main(string[] args) { Procédure BlaB [Capture] Capturer plusieurs image en boucle dans un programme [ par toof89 ] Bonjour la communauté, Je tiens avant toutes choses d'ores et déjà remercier toute la communauté csharpfr pour tout ce qu'elle a déjà fait pour moi s Question débutant - Boucle qui ralenti [ par jfleking ] Bonjour tout le monde. Ma question pourrait être simple pour quelque uns d'entre vous mais pour moi c'est un vrai casse tête. J'ai créer un petit pro Comment liberer la mémoire lors d'une boucle? [ par scalpa29 ] Voila, tout est dans le titre, j'exécute un programme qui traite et stoque des images bitmap dans des variables et j'aimerai bien vider la mémoire cac Attendre la suppression d'un fichier [ par deejay2221 ] BonjoursDans mon programme je créer un fichier .txt. Je dois faire une pause tant que le fichier n'a pas été lu par un autre programme et supprimé. Lo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales