Impossible d'effectuer un cast de X vers Y

Résolu
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 8 déc. 2010 à 10:27
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 8 déc. 2010 à 15:56
Bonjour à tous.

Je suis un peu novice dans l'utilisation de C# et quelque chose semble m'échapper.

J'ai 3 Objets

1- Detection
2- DetectionImage héritant de Detection
3- DetectionMesure héritant de Detection

J'ai ensuite une variable de type List<Detection> que je souhaiterais parcourir pour effectuer des actions mais uniquement sur les objets de type DetectionImage.

Je pensais donc bêtement qu'un "simple" :

//Recupère les détections
List<Detection> listeDetections = RecupererListeDetections();
foreach (DetectionImage detectionImage in listeDetections)
{
    //Traitement spécial pour les détections Image
}


Suffirait, mais j'ai une exception:

"Impossible d'effectuer un coast d'objet de type DetectionMesure en DetectionImage"

Je pourrais faire mon foreach en utilisant le Type Detection et ensuite tester si ma variable d'itération "is DetectionImage", Mais je voulais savoir si il n'y avait pas plus "simple". Et surtout savoir si je ne suis pas passer à côté d'un truc.

Voilà Merci de m'avoir lu, et surtout merci de m'aiguiller.

PS: j'ai chercher déjà un peu dans le forum et sur GooGle mais rien d'utile.

@+: Ju£i€n
Pensez: Réponse acceptée

6 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 déc. 2010 à 11:43
Oops, j'avais pas lu jusqu'a la fin. Désolé.

Je ne pense pas qu'il y a plus simple que le type detection par le Is
c'est quand meme simple??
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 déc. 2010 à 11:18
salut

Ce code devrait fonctionner

List<Detection> listeDetections = RecupererListeDetections();
foreach (Detection detection in listeDetections)
{
  if( detection is  DetectionImage){  
  //Traitement spécial pour les détections Image
  }
}
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
8 déc. 2010 à 11:31
Yop!
Je pourrais faire mon foreach en utilisant le Type Detection et ensuite tester si ma variable d'itération "is DetectionImage", Mais je voulais savoir si il n'y avait pas plus "simple". Et surtout savoir si je ne suis pas passer à côté d'un truc.

Tu ne réponds pas à la question
Plus sérieusement, je ne pense pas qu'il y ait une autre méthode.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
8 déc. 2010 à 11:50
Bien le bonjour,

Le foreach provoque une itération à travers chaque objet de ta collection. Dans ton cas, on peut l'assimiler à la boucle suivante:
List<Detection> listeDetections = RecupererListeDetections();
foreach (int i = 0 ; i < listeDetections.Count ; i++)
{
    listDetectionImage detectionImage = (listDetectionImage)listeDetections[i];
    //Traitement spécial pour les détections Image
}


Dès lors, certains objets ne sont évidemment pas de type listDetectionImage .
Il te faut donc effectuer une vérification du type avant d'effectuer le casting.
Tu peux utiliser une lambda comme ceci:
List<Detection> listeDetections = RecupererListeDetections();
IEnumerable listeDetectionsImage listeDetections.Where(det> det is listDetectionImage).Cast<listDetectionImage>();

Shao.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
8 déc. 2010 à 14:11
Ah oui, les lambda expression...
Je ne maîtrise pas du tout mais ça vaut le coup d'y jeter un coup d'oeil apparemment.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 déc. 2010 à 15:56
Ok et bien je vais donc passer pour l'instant par le test du type.

En tout cas merci pour votre aide.


@+: Ju£i€n
Pensez: Réponse acceptée
0
Rejoignez-nous