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 :

Problème pour transformer ma class en collection (GetEnnumerator pour ForEach) [Débutant]


Sujet :

C#

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut Problème pour transformer ma class en collection (GetEnnumerator pour ForEach)
    Bonjour,

    Je n'arrive pas à transformer une class en collection:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
        public class eventO
        {
            public string numObj { get; set; }
            public string id { get; set; }
            public lesion lesion { get; set; }
            public traitement traitement { get; set; }
        }
     
        public class traitement
        {
            public string traitement0 { get; set; }
            public string traitement1 { get; set; }
            public string traitement2 { get; set; }
            public string traitement3 { get; set; }
            public string traitement4 { get; set; }
     
        }
     
    static void Main(string[] args)
            {
                eventO test = new eventO();
     
                test.id = "1";
                test.numObj = "454";
                test.lesion.lesion0 = "454";
                test.lesion.lesion1 = "44454";
                test.lesion.lesion2 = "455454";
                test.lesion.lesion3 = "45454544";
     
                test.traitement.traitement0 = "45454";
                test.traitement.traitement1 = "4544545454";
                test.traitement.traitement2 = "4545444777";
                test.traitement.traitement3 = "454541555";
                test.traitement.traitement4 = "4545447744";
     
                foreach (traitement item in test.traitement)
                {
                    Console.Writlen
                }
            }
    J'ai forcément essayé différentes choses trouvées sur le net mais sans succès.

    L'instruction foreach ne peut pas fonctionner sur des variables de type 'ConsoleApplication1.traitement', car 'ConsoleApplication1.traitement' ne contient pas de définition publique pour 'GetEnumerator'

    Pouvez-vous m'aider ?

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Les itérations se réalise sur des collections (tableau, liste, map etc...)
    Dans ton cas tu n'as pas déclaré ton accumulation de traitement comme une collection, mais comme des propriétés indépendantes les une des autres.

    Une implémentation un peu plus propre me semble être la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      public class traitement{
            public List<string> traitement = new List<string>();
    }
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Pour pouvoir énumérer un type T il faut qu'il soit membre d'un List<T> ou Collection<T>

    Tu devrais avoir quelque chose de plus simple comme ceci:
    code du fichier mettons EventO.cs des 3 class:
    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
     
     
    namespace WindowsFormsApplication1
    {
        public class Lesion
        {
            public string LesionBase { get; set; }
        }
        public class Traitement
        {
            public string TraitementBase { get; set; }
        }
     
        public class EventO
     
        {
            public string NumObj { get; set; }
            public string ID { get; set; }
            public List<Lesion> Lesions { get; set; }
            public List< Traitement> Traitements { get; set; }
     
        }
     
     
     
     
    }
    code .cs de program.cs:

    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
    31
    32
    33
    34
     
    static void Main(string[] args)
            {
                 EventO test = new EventO();
     
                test.ID = "1";
                test.NumObj= "454";
                test.Lesions=new List<Lesion>(){
                    new Lesion (){  LesionBase = "454"},
                    new Lesion (){  LesionBase ="44454"},
                    new Lesion (){  LesionBase ="455454"},
                    new Lesion (){ LesionBase ="45454544"}
                 };
     
     
                 test.Traitements=new List<Traitement> (){
                    new Traitement (){ TraitementBase= "45454"},
                    new Traitement (){ TraitementBase="4544545454"},
                    new Traitement (){ TraitementBase="4545444777"},
                    new Traitement (){ TraitementBase="454541555"}
                    new Traitement (){ TraitementBase="4545447744"}
     
                 };
     
     
                foreach (Traitement item in test.Traitements )
                {
                    Console.WriteLine(item.TraitementBase );
                }
                foreach (Lesion item in test.Lesions )
                {
                    Console.WriteLine(item.LesionBase  );
                }       
     }
    bon code....

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Merci de ton aide mais je ne comprends pas ta réponse.

    j'ai plusieurs traitement différents qui font partis d'un même objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public class eventO
        {
            public string numObj { get; set; }
            public string id { get; set; }
            public lesion lesion { get; set; }
            public traitement traitement { get; set; }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        public class traitement
        {
            public string traitement0 { get; set; }
            public string traitement1 { get; set; }
            public string traitement2 { get; set; }
            public string traitement3 { get; set; }
            public string traitement4 { get; set; }
     
        }
    Je voudrais donc à partir de l'objet eventO.traitement à tous les différents traitements:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                foreach (var item in test.traitement)
                {
                    Console.WriteLine(item.ToString());
                }

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Merci de ton aide @MABROUKI mais je dois pouvoir distinguer les différents traitements

    traitement0 , traitement1, traitement2, traitement3 .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                foreach (var item in test.traitement)
                {
     
                    if (item.traitement0 != null) { ....}
                    if (item.traitement1 != null) { ....}
     
                }
    Bàt

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    re
    il suffit de rajouter une prop pour les identifier ,par un code :

    Fichier EventO.cs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     public class Lesion
        {
            public int Code { get; set; }
            public string LesionBase { get; set; }
        }
        public class Traitement
        {
            public int Code { get; set; }
            public string TraitementBase { get; set; }
        }
    code .cs de program.cs:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
     
    static void Main(string[] args)
            {
                   EventO test = new EventO();
     
                test.ID = "1";
                test.NumObj= "454";
                test.Lesions=new List<Lesion>(){
                    new Lesion (){  LesionBase = "454",Code=0},
                    new Lesion (){  LesionBase ="44454",Code=1},
                    new Lesion (){  LesionBase ="455454",Code=2},
                    new Lesion (){ LesionBase ="45454544",Code=3},
                 };
     
     
                 test.Traitements=new List<Traitement> (){
                    new Traitement (){ TraitementBase= "45454",Code=0},
                    new Traitement (){ TraitementBase="4544545454",Code=1},
                    new Traitement (){ TraitementBase="4545444777",Code=2},
                    new Traitement (){ TraitementBase="454541555",Code=3},
                    new Traitement (){ TraitementBase="4545447744",Code=4},
     
                 };
     
     
                foreach (Traitement item in test.Traitements )
                {
                    if (item == null) continue;
                    switch (item.Code)
                    {
                        case  0 :
                              //inserer code  de traitement ici
                              break;
                        case  1 :
                              //inserer code  de traitement ici
                              break;
                        case  2 :
                             //inserer code  de traitement ici
                              break;
     
                        case  4:
                              //inserer code  de traitement ici
                              break;
                       default:
                            break;
                    }
     
                Console.WriteLine(item.TraitementBase );
                }
     
                foreach (Lesion item in test.Lesions )
                {
                    if (item == null) continue;
                    switch (item.Code)
                    {
                        case 0:
                            //inserer code  de traitement ici
                              break;
     
                        case 1:
                            break;
                        case 2:
                            break;
                        default:
                            break;
                    }
                    Console.WriteLine(item.LesionBase);
                }
            }
     }
    bon code ....

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Citation Envoyé par MABROUKI Voir le message
    Pour pouvoir énumérer un type T il faut qu'il soit membre d'un List<T> ou Collection<T>
    Il suffit que la classe conteneur implémente le type IEnumerable (obsolète) ou IEnumerable<T> (à préférer).

    Dans ton cas, il faut donc que ta classe traitement implémente IEnumerable<string>.


    Citation Envoyé par jacko842
    foreach (var item in test.traitement)
    {

    if (item.traitement0 != null) { ....}
    if (item.traitement1 != null) { ....}


    }
    Ca ce n'est pas possible. item est de type string. Il n'y a donc pas de propriété traitementX.

    Si tu as besoins de réaliser des opérations spécifiques en fonction des traitements, tu peux :
    • Utiliser directemement test.traitement.traitementX ;
    • Utiliser l'approche proposée par MABROUKI, et faire en sorte que tes différentes traitements ne soient pas simplement une chaîne de caractères, mais une structure ou classe avec une propriété Code.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Merci pour vos explications.

    Mon problème est résolu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2006, 15h35
  2. Réponses: 2
    Dernier message: 10/09/2006, 13h28
  3. problème pour instancier une class
    Par gronaze dans le forum C++
    Réponses: 8
    Dernier message: 30/06/2006, 12h21
  4. [PEAR][DB] Configurer les classes
    Par cladsam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/02/2006, 14h11
  5. [RegEx] Problème pour transformer les url en liens cliquable
    Par AlphaYoDa dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2006, 13h54

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