IEnumerable<T> [Résolu]

Signaler
Messages postés
10
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
14 avril 2008
-
Messages postés
10
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
14 avril 2008
-
Bonjour à tous,
j'ai un gros soucis, avec IEnumerable.
J'ai repris un soft, qui utilise IEnumerable<T> tout le long du traitement.
Hors, je dois effectuer un changement de donnée.
je fais un foreach sur mon IEnumerable<T>, et j'ajoute chacun des éléments (après modif) dans une iList.
Petit problème, j'aurais besoin pour continuer mon programme, de traiter mon iList en IEnumerable<T>.

Le code (il faut en gros, réaliser la ligne en rouge, sans erreur exception :

XmlSerializer xSer = new XmlSerializer(typeof(T[]));

                IEnumerable<CDefDiscretSauvegarde> ilist2 = (IEnumerable<CDefDiscretSauvegarde>)xSer.Deserialize(reader);
                bool discret_find = false;       // flag d'identification du discret reçu

                ArrayList ilist3 = new ArrayList();
                IList<CDefDiscret> liste_dico = new List<CDefDiscret>(CMain.Instance.DicoDiscrets); // liste des discrets de référence
                foreach (CDefDiscretSauvegarde cDefDiscret in ilist2)
                {
                    int numTiroir = cDefDiscret.NumTiroir;
                    int numcarte = cDefDiscret.NumCarte;
                    int numVoie = cDefDiscret.NumVoie;
                    CDefDiscret discretTmp = new CDefDiscret();
                    for (int j = 0; j < liste_dico.Count; j++)
                    {
                        CDefDiscret d = (CDefDiscret)liste_dico[j];                        if ((d.NumTiroir numTiroir) && (d.NumCarte numcarte) && (d.NumVoie == numVoie))
                        {
                            discretTmp = d.Clone() as CDefDiscret; // new CDefDiscret(d);
                            discretTmp.Pilotage = cDefDiscret.Pilotage;
                            discretTmp.Surveillance = cDefDiscret.Surveillance;
                            discretTmp.MoyenSurveillance.LedAffichage.NumLed = cDefDiscret.NumLed;
                            discretTmp.MoyenSurveillance.LedAffichage.CouleurEtatVRAI = cDefDiscret.CouleurEtatVRAI;
                            discretTmp.MoyenSurveillance.LedAffichage.CouleurEtatFAUX = cDefDiscret.CouleurEtatFAUX;
                            discretTmp.MoyenSurveillance.LedAffichage.Utilisee = cDefDiscret.Utilisee;
                            discretTmp.MoyenSurveillance.ModeSurveillance = cDefDiscret.ModeSurveillance;
                            discretTmp.DashInPort = cDefDiscret.DashInPort;
                            discret_find = true;
                            ilist3.Add(discretTmp);
                        }
                    }
                    if (!discret_find)
                        MessageBox.Show(_gestionLangue.LireTexte(CGestionLangue.ESection.information.ToString(), "no_discret", "") + string.Format(" {0:00} / {1:00} / {2:00}", numTiroir, numcarte, numVoie));
                }
                IEnumerable<T> iIist = (IEnumerable<T>)ilist3; // exception error
              
                // Fusionner la liste courante et les nouveaux éléments
                this.MergeWith(iIist, isClearBefore);

3 réponses

Messages postés
10
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
14 avril 2008

J'ai résolu mon pb, alors je ferme le sujet.

Il m'a juste suffit de faire mon action en deux temps. En changeant le type de T. Ma question en fait partait sur une mauvaise piste.
Merci à vous.

CSortingBindingList<
CDefDiscret> t =
this.TravailSource;

CSortingBindingList<
CDefDiscretSauvegarde> u =
new
CSortingBindingList<
CDefDiscretSauvegarde>();t.VerifyDiscretEvent +=

new
VerifyDiscretEventHandler(TravailSource_VerifyDiscretEvent_Open);u.CheckValidation +=

new
_CheckFailedCurrentValidation(CheckValidationList);

List<
CDefDiscret> discrets_travail = u.DeSerialize(ouverture.FileName,
true);
t.MergeWith(discrets_travail,

true);
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Salut,
Pourquoi tu utilises une ArrayList et pas une List<CDefDicret> ??

<hr />
-My Blog-
Messages postés
10
Date d'inscription
samedi 2 décembre 2000
Statut
Membre
Dernière intervention
14 avril 2008

Je viens de changer mon code pour un List, mais bon... le problème reste le même, je ne peux pas passer en IEnumerate<T>, T étant de type cDefDiscretSauvegarde.