Problème au niveau de mes equals pour afficher une liste

Résolu/Fermé
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024 - 31 mai 2019 à 09:46
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 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();



2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
31 mai 2019 à 11:32
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();

0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
Modifié le 31 mai 2019 à 11:50
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 ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié le 31 mai 2019 à 18:45
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.


0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
31 mai 2019 à 19:05
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
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
31 mai 2019 à 19:09
Et d'ailleurs, au temps pour moi, s'agissant d'un string, Equals retourne le contenu, le résultat est strictement le même
0
Hamster18 Messages postés 178 Date d'inscription mercredi 2 janvier 2019 Statut Membre Dernière intervention 22 janvier 2024
3 juin 2019 à 13:58
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.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
3 juin 2019 à 18:40
Forcément à chaque accès à l'une de ces lignes tu la réécrivais entièrement -> du temps et des ressources
0