Problème au niveau de mes equals pour afficher une liste [Résolu]

Messages postés
58
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
17 octobre 2019
- - Dernière réponse : Whismeril
Messages postés
13842
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 octobre 2019
- 3 juin 2019 à 18:40
Bonjour,
Je réalise actuellement un projet WPF, sauf que j'ai un problème au niveau d'une recherche que je avec des equals... J'ai une classe bibliothèque de Serie et je veux rajouter à l’intérieur de cette classe une liste de Saison pour chaque Serie. Pour faire ça je veux faire une rechercher des saisons associés à une Serie das une bibliothèque de Saison. Pour faire cette recherche j'ai défini une méthode RechercheSaisonDUneSerie. Et cette recherche fait appelle à un equals qui compare 2 series. Je pense que l'un des problèmes est que je compare seulement le String de Serie, mais j'ai essayer de comparer 2 Serie, (en mettant IdSerie de Saison en Serie et faisant toute les modification qui s'impose ) cependant ça me provoquer une erreur de dépassement de pile (j'ai du très certainement mal mit prendre) sauf que du coup je voit pas comment mit prendre....

Pourriez-vous me conseiller ?
Merci d'avance pour toutes vos réponses.

Et comme je pense que mon explication n'est pas des plus claire je vous met aussi mon code =)

Classe Serie :




        public Serie(String nom, DateTime date_de_sortie, bool en_cours, Categ genre, String image, int nb_saison, string resumer, List<Saison> biblioSaison)
        {
            this.Nom = nom;
            this.DateDeSortie = date_de_sortie;
            this.EnCours = en_cours;
            this.Genre = genre;
            this.Images = image;
            this.Resumer = resumer;
            this.NbDeSaison = nb_saison;
            this.BiblioSaison = biblioSaison;
        }
        public Serie()
        {
        }

        public override int GetHashCode()
        {
            return Nom.GetHashCode();
        }

        public bool Equals(Serie other)
        {
            return (this.Nom.Equals(other.Nom) && this.Resumer == other.Resumer);
        }








classe Saison :


 public class Saison 
    {
        public string NomSaison { get; set; }
        public string IdSerie { get; set; }
        public string Image { get; set; }

        public Saison(String nom_saison, String id_serie, String image)
        {
            this.NomSaison = nom_saison;
            this.IdSerie = id_serie;
            this.Image = image;
        }






Classe qui fait la bibliothèque de Serie :


    public class BiblioSerie 
    { 
        public ObservableCollection<Serie> ListSerie { get { return GetAll(); } }



        BiblioSaison BiblioSaison { get; set; } = new BiblioSaison();

      {
            return new ObservableCollection<Serie>()
            {
            new Serie("Grey's Anatomy",DateTime.Parse("27/03/2005"),true,Categ.Dramatique, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15,
            "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition fait rage...", BiblioSaison.RechercheSaisonDUneSerie("Grey's Anatomy")),
            new Serie("Lucifer", DateTime.Parse("26/01/2016"), false,Categ.Fantastique, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron d'un nightclub baptisé Lux.", BiblioSaison.RechercheSaisonDUneSerie("Lucifer")),
            new Serie("The 100", DateTime.Parse("19/03/2014"),true,Categ.Horreur, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants redescendent sur Terre.", BiblioSaison.RechercheSaisonDUneSerie("The 100")),
            new Serie("The Walking Dead", DateTime.Parse("20/03/2011"),true,Categ.Action, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal faire face à ce nouveau monde.", BiblioSaison.RechercheSaisonDUneSerie("The Walking Dead"))
      }
}










classe bibliothèque Saison :


    public class BiblioSaison
    {
        public List<Saison> ListSaison { get { return GetAll(); } }

        public List<Saison> GetAll()
        {
            return new List<Saison>()
            {
                new Saison("Saison 1", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 2", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 3", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 4", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 1", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 2", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 3", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 4", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 5", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),


            };
        }

        public List<Saison> RechercheSaisonDUneSerie(string nomSerie)
        {
            return ListSaison.Where(saison => saison.IdSerie.Equals(nomSerie)).ToList();
        }




Code C# :
la var list me sert à savoir si la liste se rempli grâce à un point d’arrêt (et cet liste reste vide)



         public Saison_Grey_s_anatomy()
        {
            InitializeComponent();
            var list = BiblioSaison.RechercheSaisonDUneSerie("Grey's Anatomy");


        }
        public BiblioSerie BiblioSerie { get; set; } = new BiblioSerie();
        public BiblioSaison BiblioSaison { get; set; } = new BiblioSaison();



Afficher la suite 

2 réponses

Messages postés
13842
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 octobre 2019
403
0
Merci
Bonjour, Equals compare les référence, or les strings sont des types valeurs, donc leur références sont toujours différentes

return ListSaison.Where(saison => saison.IdSerie == nomSerie).ToList();

Hamster18
Messages postés
58
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
17 octobre 2019
-
Bonjour,
J'avais test cette commande mais elle ne me fait pas de "trie" elle me retourne la liste de saison entière ... C'est pour cela que j'avais penser equals car il faudrait que ça me compare ce qui est écrit et nom les références, mais d'après ce que vous me dit je suis pas sur la bonne voie... Faudrait-il alors redéfinir la méthode compareTo ?
Commenter la réponse de Whismeril
Messages postés
13842
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 octobre 2019
403
0
Merci
Déjà, ce serait bien, que tu prennes en compte, ce que je t'ai dit dans tes précédents posts.

) cependant ça me provoquer une erreur de dépassement de pile (j'ai du très certainement mal mit prendre) sauf que du coup je voit pas comment mit prendre....

C'est à cause de ça
       public List<Saison> ListSaison { get { return GetAll(); } }

        public List<Saison> GetAll()
        {
            return new List<Saison>()
            {
                new Saison("Saison 1", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 2", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 3", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 4", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 1", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 2", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 3", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 4", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 5", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),


            };

et ça
        public ObservableCollection<Serie> ListSerie { get { return GetAll(); } }



        BiblioSaison BiblioSaison { get; set; } = new BiblioSaison();

      {
            return new ObservableCollection<Serie>()
            {
            new Serie("Grey's Anatomy",DateTime.Parse("27/03/2005"),true,Categ.Dramatique, "Medias/Photos/Serie_Grey-s_anatomy.jpg", 15,
            "Meredith Grey, fille d'un chirurgien très réputé, commence son internat de première année en médecine chirurgicale dans un hôpital de Seattle. La jeune femme s'efforce de maintenir de bonnes relations avec ses camarades internes, mais dans ce métier difficile la compétition fait rage...", BiblioSaison.RechercheSaisonDUneSerie("Grey's Anatomy")),
            new Serie("Lucifer", DateTime.Parse("26/01/2016"), false,Categ.Fantastique, "Medias/Photos/Serie_Lucifer.png", 5, "Lassé et mécontent de sa position de Seigneur des Enfers, Lucifer Morningstar démissionne et abandonne son royaume pour la bouillonnante Los Angeles. Dans la Cité des anges, l'ex maître diabolique est le patron d'un nightclub baptisé Lux.", BiblioSaison.RechercheSaisonDUneSerie("Lucifer")),
            new Serie("The 100", DateTime.Parse("19/03/2014"),true,Categ.Horreur, "Medias/Photos/Serie_The_100.jpg", 3, "Après une apocalypse nucléaire, les 318 survivants se réfugient dans des stations spatiales et parviennent à y vivre et à se reproduire, atteignant le nombre de 4000 ; 97 ans plus tard, une centaine de jeunes délinquants redescendent sur Terre.", BiblioSaison.RechercheSaisonDUneSerie("The 100")),
            new Serie("The Walking Dead", DateTime.Parse("20/03/2011"),true,Categ.Action, "Medias/Photos/Serie_The_walking_dead.jpg", 9, "Après une apocalypse ayant transformé la quasi-totalité de la population en zombies, un groupe d'hommes et de femmes mené par l'officier Rick Grimes tente de survivre. Ensemble, ils vont devoir tant bien que mal faire face à ce nouveau monde.", BiblioSaison.RechercheSaisonDUneSerie("The Walking Dead"))
      }


Je te l'ai déjà expliqué et t'ai montré comment coder ça correctement.

J'avais test cette commande mais elle ne me fait pas de "trie" elle me retourne la liste de saison entière

Oui elle te retourne toutes les saisons de la série que tu as mis en paramètre, et si equals avait marché ça aurait retourné la même chose.
Si c'est pas ce que tu veux, il faudrait mieux expliquer, car je ne comprends pas.


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Whismeril
Messages postés
13842
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 octobre 2019
403 -
Dans ta classe Saison, j'ai "remplacé" ToString, pour pouvoir te faire la capture d'écran ci-après.
        /// <summary>
        /// Override de ToString pour afficher la série et la saison de chaque instance
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("{0}, {1}", IdSerie, NomSaison);
        }


J'ai repris la fenêtre que j'avais utilisé ultérieurement pour toi, avec juste une liste de saisons en local.

        BiblioSerie biblioSerie;

        private List<Saison> lesSaisons = new List<Saison>()
            {
                new Saison("Saison 1", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 2", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 3", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 4", "Lost", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 1", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 2", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 3", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 4", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),
                new Saison("Saison 5", "Grey's Anatomy", "Medias/Photos/Serie_The_walking_dead.jpg"),


            };
        public GenreAction(BiblioSerie BiblioSerie)
        {
            InitializeComponent();

            biblioSerie = BiblioSerie;//si tu en as besoin ailleurs dans le code behind

            this.DataContext = biblioSerie;//le datacontexte de la fenetre est cette instance de BiblioSerie

            List<Saison> saisonsLost = lesSaisons.Where(s => s.IdSerie == "Lost").ToList();
        }




J'ai bien les 4 saisons de Lost
Whismeril
Messages postés
13842
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 octobre 2019
403 -
Et d'ailleurs, au temps pour moi, s'agissant d'un string, Equals retourne le contenu, le résultat est strictement le même
Hamster18
Messages postés
58
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
17 octobre 2019
-
Bonjour,
Merci pour votre réponse, j'avais laissé met Bibliothèque telle quel car on m'avait conseillée de faire ainsi mais votre méthode et bien meilleur ( je viens de la tester et le temps de démarrage de l'application est bien meilleur !!! ) Merci pour tous vos conseils =).

Cordialement.
Whismeril
Messages postés
13842
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 octobre 2019
403 -
Forcément à chaque accès à l'une de ces lignes tu la réécrivais entièrement -> du temps et des ressources
Commenter la réponse de Whismeril