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

Windows Forms Discussion :

[C#] Syntaxe et scope d'un FOR !?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut [C#] Syntaxe et scope d'un FOR !?
    Hello, je suis un peu honteux de poser cette question mais bon
    voila j'ai un problème avec une boucle for en .Net Compact Framework.
    avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i=0; i<10;i++)
    {...}
     
    for (int i=0; i<10;i++)
    {...}
    c'est illégal !? je suis un peu surpris pcq en Java et en C++ c'est tout à fait normal... soit le scope du i ne se limite pas au for

    mais si je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int i;
    for (i=0; i<10;i++)
    {...}
     
    for (i=0; i<10;i++)
    {...}
    j'ai aussi une exception !?! je comprends plus trop là
    An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll

    Additional information: InvalidOperationException

    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

    Additional information: InvalidOperationException

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut Re: [C#] Syntaxe et scope d'un FOR !?
    Citation Envoyé par Wavyx
    voila j'ai un problème avec une boucle for en .Net Compact Framework.
    avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i=0; i<10;i++)
    {...}
     
    for (int i=0; i<10;i++)
    {...}
    c'est illégal !?
    Nope.

    Citation Envoyé par Wavyx
    mais si je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i;
    for (i=0; i<10;i++)
    {...}
     
    for (i=0; i<10;i++)
    {...}
    j'ai aussi une exception !?!
    Devrait pas.

    Citation Envoyé par Wavyx
    An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll

    Additional information: InvalidOperationException

    An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

    Additional information: InvalidOperationException
    Et ça c'est pas un problème de déclaration de variable (qui serait intercepté par le compilo). Regarde la ligne que l'expcetion indique et fais nous voir un peu du code à l'intérieur de la boucle. Notamment celui de la ligne en cause.

  3. #3
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Comme Maniak,
    Les exceptions ne sont pas du à ta syntaxe du for
    par contre avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i=0; i<10;i++)
    {...}
     
    for (int i=0; i<10;i++)
    {...}
    tu devrais avoir une erreur de compilation genre i est déjà déclaré.
    On en a discuté il y a un moment Maniak. Tu t'en souviens ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    ok voilà déjà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    private void populateListBox(String key)
    		{
    			int i;
    			lstBox.Items.Clear();
     
    			DataTable dt = DB.getListMag();
    			ArrayList list = new ArrayList(50);
     
    			String temp;
    			for (i=0; i<dt.Rows.Count;i++)
    			{
    				temp = dt.Rows[i]["NAME"].ToString();
    				if(temp.StartsWith(key))
    				{
    					list.Add(new DO.Magasin(Convert.ToInt32(dt.Rows[i]["ID"]),temp));
    				}
    			}
    			list.Sort();
    			for (i=0; i<list.Count; i++)
    			{
    				this.lstBox.Items.Add(list[i]);
    			}
     
    		}
    et pour les details du "bug":
    i=74 (le nbre d'items total)
    key="C" (mais c pas important
    list.count = 7 (pour key='C') et c'est normal
    et ça plante gentillement après le list.sort() qd je fais for(i=0 ...) à "i=0" !?
    et c'est tjs InvalideOperationException.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    je répondais mais pour la syntaxe je suis d'accord ça n'est sans doute pas la cause mais c'est pourtant à la 2e assignation de i=0 que ça plante

    d'autre part si je met 2X for(int i=0; ...) je n'ai aucune erreur ni warning a la compilation...


    je rappelle que c'est avec le .net compact framework au cas où ça aurait une importance

  6. #6
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    private void populateListBox(String key)
          {
             try
             {
             int i;
             lstBox.Items.Clear();
     
             DataTable dt = DB.getListMag();
             ArrayList list = new ArrayList(50);
     
             String temp;
             for (i=0; i<dt.Rows.Count;i++)
             {
                temp = dt.Rows[i]["NAME"].ToString();
                if(temp.StartsWith(key))
                {
                   list.Add(new DO.Magasin(Convert.ToInt32(dt.Rows[i]["ID"]),temp));
                }
             }
             list.Sort();
             for (i=0; i<list.Count; i++)
             {
                this.lstBox.Items.Add(list[i]);
             }
             }
             catch (Exception ex)
             {
                   System.Diagnostics.Debug.Writeline(ex.ToString());
              }
          }
    Met un try catch et poste le résultat du writeline

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    voili voula:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "System.InvalidOperationException:InvalidOperationException"
    la seule chose que je peux essayer c'est d'updater le Compact Framework bien que je pense avoir déjà le SP1 et que dans le SP2 je ne vois rien dans les fix...
    dans le sp1, ya pe un fix lié: InvalidOperationException when polymorphic type is returned and in the same namespace as the service

    je commence à craquer avec les ipaq et le .net cf

    SP1: http://www.microsoft.com/downloads/details.aspx?FamilyID=1f62a2a3-7282-4ba9-b26b-2267e972501d&displaylang=en
    SP2: http://www.microsoft.com/downloads/details.aspx?FamilyID=359ea6da-fc5d-41cc-ac04-7bb50a134556&displaylang=en

  8. #8
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    excuse

    Je voulais dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Debug.Writeline(ex.StackTrace);

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    bon j'ai commencé à lire votre thread sur les foreach et les scopes c'est follement amusant ! je suis encore plus perturbé qu'avant

    sinon pour la stack trace, hé bien vive le .net cf ! alors je fais avec ce que je peux c'est à dire: ex.Message et ex.InnerException
    en fait j'obtiens pareil car Message c'est pareil que ex.ToString() et ex.InnerException est vide...

    .NET CF = TRICKY world !

    PS: sans oublier que "System.Diagnostics.Debug.WriteLine" je vois pas où ça affiche dans l'emulateur :S

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Une idée comme ça en passant : les objets que tu colles dans ton ArrayList, les DO.Magasin là, est-ce qu'ils implément l'interface IComparable ?

    Parce que ArrayList.Sort utilise ça pour effectuer son tri. Et si tu essayes de trier des objets non-comparables, c'est une opération invalide. Ça ressemblerait étrangement à ton exception :)

    Si tu ne veux pas modifier ta classe, tu peux utiliser un des overloads de Sort qui prend un objet IComparer. C'est lui qui sera chargé de faire les comparaisons.

    10 contre 1 que ça vient de là.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    sorry j'étais en break cinema !

    euhm.... il se pourrait bien que j'ai omis ce petit détail...
    bizarre que ça plante au for suivant

    je vais tester et je vous tiens au courant mais là je dois preter mon pc à un copain pdt 1H (au moins...)

    il en reste pour le moment que l'histoire des scopes me travaille pas mal

    merci déjà pour votre investissement dans mon cas.

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Wavyx
    euhm.... il se pourrait bien que j'ai omis ce petit détail... :oops:
    bizarre que ça plante au for suivant
    Pas forcément. C'est quoi qui t'indique que ça plante à la ligne d'après ? Le marqueur vert du debuggueur quand tu fais break ? Parce qu'il indique l'instruction suivant celle qui a causé l'erreur.

    Citation Envoyé par Wavyx
    il en reste pour le moment que l'histoire des scopes me travaille pas mal
    C'est pas une question de portée là, tes deux exemples marchent de la même façon, si ce n'est que dans le 2è, i est encore directement utilisable après les boucles.

    La 'bizarrerie' de C#, est que dans le premier exemple, tu ne peux pas avoir une autre variable i déclarée à l'extérieur des for. Il ne peut pas y avoir deux variables de même nom déclarées l'une dans un bloc parent et l'autre dans un bloc enfant. Même si celle du bloc enfant est censée disparaitre une fois qu'on en est sorti.

    C'est le seul cas particulier (et il y a déjà eu un topic là-dessus ici il y a quelques temps, tu devrais y trouver davantage d'exemples)

    [edit]le topic en question :)[/edit]

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    effectivement c'était bien le "Icomparable"

    un grand merci

    je vais qd meme relire cette histoire de portée avec les for each, çà me tracasse. En fait je me dis que si on veut récupérer la valeur d'un itérateur on le declare explicitement avant la boucle. or en .net on a pas le choix! je doute un peu du coté pratique pcq ça' limite les possibilités'

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Wavyx
    En fait je me dis que si on veut récupérer la valeur d'un itérateur on le declare explicitement avant la boucle.
    Ben oui.

    Citation Envoyé par Wavyx
    or en .net on a pas le choix!
    Je vois pas le rapport là.

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 141
    Par défaut
    on va dire que j'ai pas encore tout saisi alors
    je trouve "bizarre" de ne pas pouvoir déclarer mon "int i" dans une deuxieme boucle pcq pour moi la portée devrait se limiter au corps de la premiere boucle.
    enfin perso le compilateur ne me dit rien (meme pas un warning) qd je fais deux fois for(int i = 0;...) {...}

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

Discussions similaires

  1. Syntaxe boucle for
    Par fmoriet dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 22/12/2006, 07h39
  2. boucles while/for : syntaxe incompréhensible
    Par Loceka dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/12/2006, 21h04
  3. [VBS][Débutant] Problème syntaxe boucle For
    Par _alex_ dans le forum VBScript
    Réponses: 2
    Dernier message: 26/07/2006, 14h26
  4. Aide pour syntaxe de boucle "FOR"
    Par tribaleur dans le forum ASP
    Réponses: 2
    Dernier message: 31/05/2006, 14h03
  5. [Syntaxe] Boucle For imbriquées en 1.5
    Par Piolet dans le forum Langage
    Réponses: 5
    Dernier message: 09/01/2005, 00h49

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