Impossible d'effectuer un cast de X vers Y [Résolu]

Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- - Dernière réponse : jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
3
Merci
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??

Merci nhervagault 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
0
Merci
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
  }
}
Commenter la réponse de nhervagault
Messages postés
14280
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
12 décembre 2018
0
Merci
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
Commenter la réponse de BunoCS
Messages postés
155
Date d'inscription
jeudi 12 mai 2005
Dernière intervention
8 mars 2011
0
Merci
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.
Commenter la réponse de Shaolyne
Messages postés
14280
Date d'inscription
lundi 11 juillet 2005
Dernière intervention
12 décembre 2018
0
Merci
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
Commenter la réponse de BunoCS
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
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
Commenter la réponse de jrivet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.