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

jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 8 déc. 2010 à 10:27 - Dernière réponse : jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention
- 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

nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 8 déc. 2010 à 11:43
+3
Utile
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??
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de nhervagault
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 8 déc. 2010 à 11:18
0
Utile
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
BunoCS 13841 Messages postés lundi 11 juillet 2005Date d'inscription 23 mai 2018 Dernière intervention - 8 déc. 2010 à 11:31
0
Utile
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
Shaolyne 155 Messages postés jeudi 12 mai 2005Date d'inscription 8 mars 2011 Dernière intervention - 8 déc. 2010 à 11:50
0
Utile
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
BunoCS 13841 Messages postés lundi 11 juillet 2005Date d'inscription 23 mai 2018 Dernière intervention - 8 déc. 2010 à 14:11
0
Utile
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
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 8 déc. 2010 à 15:56
0
Utile
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.