Se simplifier la vie en C# : les conversions / cast !

icon Tags de l'article : ,

Juin 06, 2011

Lorsque vous développez en C#, il vous arrive souvent d'avoir à caster (ou convertir, mais bon, caster c'est plus fun et ça fait un peu Meuporg !) vos objets :

Homme homme = (Homme)personne;

Or, si votre objet personne n'est pas un objet Homme mais un objet Femme, que se passera-t-il ? (Vous avez 5 minutes, ensuite je ramasse les copies !) Votre code lèvera une exception ! (Bon, tous ceux qui se sont trompés vont au coin !)

Heureusement, C#PO, spécialiste de la conversion en C#, est là pour nous aider !

Comment faire autrement ? Voici trois solutions possibles, de la plus mauvaise à la meilleure (selon C#PO, droïde de protocole C# / C#) :

  • try
    {
        homme = (Homme)personne; 
    }
    catch
    {
        femme = (Femme)personne;
    }
    Ici, rien de bien compliqué, on utilise un try catch pour attraper l'exception qui sera levée si jamais l'objet personne se révèlerait être un objet Femme au lieu d'un objet Homme. Je vous recommande d'éviter ce code car attraper des exceptions doit rester quelque chose d'exceptionnel...
  • if(personne is Homme) 
    {
        homme = (Homme)personne;
    }
    else
    {
        femme = (Femme)personne;
    }
    Ici, on utilise le mot clef is pour vérifier si notre objet est de type Homme ou Femme. Ce code est le plus "propre" des trois codes présents ici, mais il faut à chaque fois s'amuser à tester le type de votre objet. A voir selon votre façon de coder si vous préférez cette façon de faire ou la suivante.
  • homme = personne as Homme;
    femme = personne as Femme;
    Enfin, ici, vous avez le code le plus simple et le plus rapide à saisir, ce dernier utilisant le mot clef as. Ce mot clef permet de faire un cast qui renverra null si l'objet n'est pas du type indiqué. C'est moins "propre" que d'utiliser le mot clef is pour tester en amont, mais ça a le mérite d'être très rapide à saisir et d'éviter d'avoir à utiliser un try catch à chaque cast.

Voilà, j'espère que cet article vous aura été utile, en tout cas n'hésitez pas à donner dans les commentaires votre façon de faire, surtout si elle diffère des méthodes que je viens de vous donner. (Et on dit merci à C#PO ! Wink)

Bon dev à tous !

image de Andres Rueda

Commentaires fermés

icon Flux RSS des commentaires de cet article

Les commentaires sont fermés pour cet article