On en apprend tous les jours

22 sept. 2006 Classé sous :

Une nouvelle découverte dans les specs du langage c# : l'opérateur ??.

Je connaissais l'opérateur ?:, que j'utilise parfois (même si je m'en méfie dans les codes trop complexes par sa difficulté de lecture), mais je suis tombé sur cette notation en recherchant des infos sur un "singleton par requête".

Bon, je ne suis pas sur qu'il soit raisonnable de l'utiliser en lieu et place d'un bon if classique :

if(toto == null)

  toto = new MaClasse();

return toto;

Surtout que c'est ce qu'il cherche à faire dans son exemple "si telle variable vaut null, l'initialiser ; ensuite renvoyer la variable".

(Pour la petite anecdote, je suis tombé sur ces histoires de ThreadStatic, CallContext, HttpContext car je cherche à mettre en place pour une appli serveur sensée fonctionner à la fois en ASP.NET et en service, donc indépendante de ce fameux HttpContext.Current. Et bien c'est au final loin d'être simple).

Commentaires

  1. Mimetis
    23 sept. 2006 12:42

    C'est surtout utile pour les Nullable<T>

    l'opérateur ?? renvoit la valeur par défaut du Nullable<T> à une valeur qui n'accepte pas le null :)

    int? x = null;

    // hop hop x = 2;

    int y = x ?? -1;

    dans ce cas, si x != null alors y recevra x.Value, sinon y recevra -1

    (bon ici ce sera -1 hein :))

    Mimetis

  2. Toutoune_31
    28 sept. 2006 14:29

    Sympa cet opérateur "??"

    Par contre le "?" qui suit "int" rend la classe nullable ?

    Si oui, ça marche avec toutes les classes ou juste avec les litéraux ?

  3. Styx31
    29 sept. 2006 19:33

    @Toutoune_31

    Ca sert uniquement pour les types valeur. Aucun intérêt pour les types références, qui peuvent tous être passés à null.

    int? est équivalent à Nullable<int>.

Laissez un commentaire