Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu MEZIL

I love .Net

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

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 6 heures et 11 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 7 heures et 25 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 21 heures et 5 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 22 heures et 1 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 22 heures et 16 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18