Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

if != null

Qui n'a jamais fait quelque chose comme ça:

LicensePlate licensePlate = null;

// Récupérer une instance pour licensePlate

Car car;

Person owner;

Address address;

string code;

if (licensePlate != null)

    if ((car = licensePlate.Car) != null)

        if ((owner = car.Owner) != null)

            if ((address = owner.Address) != null)

                code = address.PostCode;

 

ou un équivalent ?

 

Ce code est long pour pas grand chose et c'est pénible.

Bien sûr, il est possible d'utiliser la syntaxe ?: au lieu du if :

 

code = licensePlate == null ? null : ((car = licensePlate.Car) == null ? null : ((owner = car.Owner) == null ? null : ((address = owner.Address) == null ? null : address.PostCode)));

 

Mais même comme ça, ce n'et pas l'idéal, surtout que le code perd vite en lisibilité.

 

Même si je n'arrive pas à retrouver l'article en question, je suis à peu près certain d'avoir lu quelque part qu'on pourrait récupérer le code avec C#4 de la façon suivante :

 

code = licensePlate?.Car?.Owner?.Address?.PostCode;

 

Cependant, si vous voulez récupérer les instances intermédiaires ou ne pas attendre C#4, vous pouvez utiliser une extension method comme vient de le proposer Alex dans son blog. Perso, j'adore cette solution.

 

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Publié vendredi 29 février 2008 06:59 par Matthieu MEZIL

Classé sous : ,

Commentaires

# re: if != null @ vendredi 29 février 2008 11:26

il y a plus simple quand même :

if (licensePlate != null &&

   (car = licensePlate.Car) != null &&

   (owner = car.Owner) != null &&

   (address = owner.Address) != null) {

}

ok... ce n'est pas du C#4... mais ça évite les if imbriqués

sebmafate

# re: if != null @ vendredi 29 février 2008 12:27

Surtout que la solution de seb évite les delegates, niveau perf c'est meme pas comparable. L'utilisation d'un delegate a un cout non négligeable. Je trouve que cette situation ne nécessite pas l'utilisation d'un tel cout.

Donc oui pour des améliorations du compilo C#4 mais non pour l'utilisation intensive du compilo C#3.

cyril

# re: if != null @ vendredi 29 février 2008 15:28

Cyril je ne pense pas que cela soit lié au compilo mais plutot à l'interpréteur. Au final si tu désassemble le code compilé tu retrouveras l'équivalent de tes if imbriqués.

Sinon ok pour les delegate, c'est vraiment pas une bonne solution sauf si vous souhaitez coder une limace.

Shell

# re: if != null @ vendredi 29 février 2008 15:38

Shell c'est ce que sous entendais ma phrase :) Les optimisations du compilo C#4 généreront surement le même code performant de seb.

cyril

# re: if != null @ vendredi 29 février 2008 20:44

Tu as entièrement raison Seb.

D'ailleurs tant qu'à faire, autant éviter le if :

code = (licensePlate != null && (car = licensePlate.Car) != null && (owner = car.Owner) != null && (address = owner.Address) != null) ? address.PostCode : null;

Matthieu MEZIL

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le il y a 5 heures et 4 minutes

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le il y a 14 heures et 9 minutes

- SharePoint Blog Site, problème d’archives par Le Blog (Vert) d'Arnaud JUND le 05-20-2012, 13:09

- Soirée ALT.NET Mai - 3 présentations par #Rui le 05-18-2012, 11:59

- [ #SharePoint 2010][ #SQLServer 2012] AlwaysOn pour SharePoint (2/4) : Configuration (2e partie)… par Le blog de Patrick [MVP SharePoint] le 05-18-2012, 11:31

- Team Foundation Server 11: tous les trésors cachés du site d’équipe par Philess le 05-16-2012, 19:01

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le 05-16-2012, 17:36

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26

- [SharePoint 2010] – SharePoint 2010, Windows (Server) 8 et des erreurs IIS sont dans une VM… par Blog de SPBrouillet (Pierrick BROUILLET) le 05-14-2012, 12:10