IEnumerable<T>

Résolu
chris31500 Messages postés 10 Date d'inscription samedi 2 décembre 2000 Statut Membre Dernière intervention 14 avril 2008 - 6 mars 2008 à 16:52
chris31500 Messages postés 10 Date d'inscription samedi 2 décembre 2000 Statut Membre Dernière intervention 14 avril 2008 - 6 mars 2008 à 18:33
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

chris31500 Messages postés 10 Date d'inscription samedi 2 décembre 2000 Statut Membre Dernière intervention 14 avril 2008
6 mars 2008 à 18:33
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);
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 mars 2008 à 17:34
Salut,
Pourquoi tu utilises une ArrayList et pas une List<CDefDicret> ??

<hr />
-My Blog-
0
chris31500 Messages postés 10 Date d'inscription samedi 2 décembre 2000 Statut Membre Dernière intervention 14 avril 2008
6 mars 2008 à 18:11
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.
0
Rejoignez-nous