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 :

comment créer dynamiquement une variable globale?


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 355
    Points : 0
    Points
    0
    Par défaut comment créer dynamiquement une variable globale?
    bonjour

    Je suis confronté au problème suivant:

    au sein d'une fonction,je crée 2 boucles for différentes utilisant la même variable i d'incrémentation
    Si je n'isole pas ces boucles par des accolades,ça plante ce qui est normal car i bifurquerai n'importe comment
    Donc je suis obligé d'isoler ces boucles for mais dans chacune d'elle j'utilise la même variable dépendant de i déclarée et initialisée dynamiquement(obligé pour le sens de mon programme)
    Ce qui résoudrait mon problème serait d'écrire quelque chose ressemblant à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void function(void){
        for (i= 0  ; i<=100     ; i++   )      //1ère boucle
          { var objeti=new type ("objet"+i);}
     
        for (i=5;i>50;i=i+2)                      //2ème boucle
          {  Destroy(objeti);  }
                               }
    Le compilateur me dit que objeti n'est déclaré qu'en local

    d'où ma question:
    Comment puis-je déclarer en global(static) ma variable objeti créée dynamiquement?


    merci de votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Il manque un bout de code pour que je comprenne

    Si je fait simplement cela
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void function()
    {
        var objeti = new Type("objet" + 1);
     
        for (i = 0; i <= 100; i++)
        { }
    }
    J'ai 2 erreurs :
    Impossible de créer une instance de la classe abstraite ou de l'interface 'Type'
    Le nom 'i' n'existe pas dans le contexte actuel

    PS : J'ai enlever le paramètre void dans la méthode qui me sort aussi une erreur

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Si tu veux libérer des objets sans attendre le passage du GC, il faut implémenter IDisposable.
    De plus avec le code suivant, tu écrases systématiquement le contenu de objeti.
    Le seul sur lequel tu as encore un pointeur c'est le dernier.
    Donc quand tu fait Destroy (il vaut mieux appeler Dispose mais bon) dans ta deuxième boucle, tu détruit le dernier et tu essaies de le détruire à nouveau (déjà détruit).

    Si tu veux pouvoir libérer tous ces objets, je te suggère d'implémenter IDisposable sur leur classe et de les placer dans une List

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Le Destroy ne semble être qu'une méthode, on ne sais pas ce qu'il fait.

  5. #5
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Moi je dirais juste qu'on ne sait pas ce qu'il fait, son code n'a ni queue ni tête et on n'a pas la moindre idée du problème qu'il cherche à résoudre.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 794
    Points : 987
    Points
    987
    Par défaut
    Citation Envoyé par tabkelm Voir le message
    bonjour

    Je suis confronté au problème suivant:

    au sein d'une fonction,je crée 2 boucles for différentes utilisant la même variable i d'incrémentation
    Si je n'isole pas ces boucles par des accolades,ça plante ce qui est normal car i bifurquerai n'importe comment
    Donc je suis obligé d'isoler ces boucles for mais dans chacune d'elle j'utilise la même variable dépendant de i déclarée et initialisée dynamiquement(obligé pour le sens de mon programme)
    Ce qui résoudrait mon problème serait d'écrire quelque chose ressemblant à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void function(void){
        for (i= 0  ; i<=100     ; i++   )      //1ère boucle
          { var objeti=new type ("objet"+i);}
     
        for (i=5;i>50;i=i+2)                      //2ème boucle
          {  Destroy(objeti);  }
                               }
    Le compilateur me dit que objeti n'est déclaré qu'en local

    d'où ma question:
    Comment puis-je déclarer en global(static) ma variable objeti créée dynamiquement?


    merci de votre aide
    Ton code n'a aucun sens...

    Premièrement objeti est forcément locale puisque scopé encore {} . Secondement à chaque tour tu crée un nouvelle variable objeti qui est supprimé en sortant du scope...

    En outre tu ne peux créer une instance de Type.. Et le type object1, object2 etc. n'existe pas non plus ...

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Je ne suis pas sûr de comprendre ce que tu fais.
    Si tu à une liste d'objet et que tu souhaite simplement supprimer une partit des objets, il te suffit de cree une autre list d'objet dans lequel du renseigne chaque objet à supprime puis tu passe dans cette liste pour supprimer les element dans la initial:

    Exemple avec List<string>:
    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
     
    List<string> List_initiale = new List<string>();
    List<string> List_suppr = new List<string>()
    //Code remplir liste List_initiale 
    //vu que le code boucle deja sur la liste, il est pas possible de supprimer l'element en question en même temps
    foreach(string element_list_initial in List_initiale)
    {
             IF(//condition pour supprimer l'element)
             {
                    List_suppr.Add(element_list_initial);
             }
    }
    //Une fois bloucle faite
    foreach(string element_suppr in List_suppr)
    {
                  List_initiale.Remove(element_suppr );
    }
    //Voilà la liste initiale contient seulement les element désiré





    Citation Envoyé par tabkelm Voir le message
    bonjour

    Je suis confronté au problème suivant:

    au sein d'une fonction,je crée 2 boucles for différentes utilisant la même variable i d'incrémentation
    Si je n'isole pas ces boucles par des accolades,ça plante ce qui est normal car i bifurquerai n'importe comment
    Donc je suis obligé d'isoler ces boucles for mais dans chacune d'elle j'utilise la même variable dépendant de i déclarée et initialisée dynamiquement(obligé pour le sens de mon programme)
    Ce qui résoudrait mon problème serait d'écrire quelque chose ressemblant à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void function(void){
        for (i= 0  ; i<=100     ; i++   )      //1ère boucle
          { var objeti=new type ("objet"+i);}
     
        for (i=5;i>50;i=i+2)                      //2ème boucle
          {  Destroy(objeti);  }
                               }
    Le compilateur me dit que objeti n'est déclaré qu'en local

    d'où ma question:
    Comment puis-je déclarer en global(static) ma variable objeti créée dynamiquement?


    merci de votre aide

  8. #8
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Ça ne sert pas à grand chose de déterrer un topic qui as plus de 6 mois, avec un sujet incompréhensible et dont l'auteur n'a pas pris le temps de réagit à l'une des réponses qui lui ont été apportées.

Discussions similaires

  1. [C#] Comment créer une variable globale?
    Par FraktaL dans le forum Windows Forms
    Réponses: 8
    Dernier message: 10/05/2017, 14h10
  2. Comment créer une variable globale à un site ?
    Par MelkInarian dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2017, 17h54
  3. [D2010] Comment créer dynamiquement une TSQLStoredProc ?
    Par Lung dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/11/2012, 18h35
  4. comment créer une variable globale
    Par didafd dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 09/11/2011, 10h38

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