Problème au niveau de mes equals pour afficher une liste
Résolu
Hamster18
Messages postés
176
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
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 :
classe Saison :
Classe qui fait la bibliothèque de Serie :
classe bibliothèque Saison :
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)
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();
A voir également:
- Problème au niveau de mes equals pour afficher une liste
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Afficher appdata - Guide
- Liste de diffusion whatsapp - Guide
2 réponses
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();
Déjà, ce serait bien, que tu prennes en compte, ce que je t'ai dit dans tes précédents posts.
C'est à cause de ça
et ça
Je te l'ai déjà expliqué et t'ai montré comment coder ça correctement.
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.
) 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.
Dans ta classe Saison, j'ai "remplacé" ToString, pour pouvoir te faire la capture d'écran ci-après.
J'ai repris la fenêtre que j'avais utilisé ultérieurement pour toi, avec juste une liste de saisons en local.

J'ai bien les 4 saisons de Lost
/// <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
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 ?