Est-il une “face” à la nulle coalescence de l'opérateur? (...dans n'importe quelle langue?)

null coalescence se traduit approximativement à return x, unless it is null, in which case return y

J'ai souvent besoin d' return null if x is null, otherwise return x.y

Je peux utiliser return x == null ? null : x.y;

Pas mal, mais que null dans le milieu toujours me dérange -- il semble superflu. Je préfère quelque chose comme return x :: x.y;, où ce qui suit le :: est évaluée uniquement si ce qui précède, il n'est pas null.

Je vois cela comme presque un face à null coalescence, genre de mélange avec un laconique, inline null-vérifier, mais je suis [presque] certains qu'il n'existe pas un tel opérateur en C#.

Il existe d'autres langues qui ont un de ces opérateurs? Si oui, quel est-il?

(Je sais que je peux écrire une méthode pour en C#; - je utiliser return NullOrValue.of(x, () => x.y);, mais si vous avez rien de mieux, j'aimerais voir ça aussi.)

  • Certains ont demandé quelque chose comme x?.y en C#, mais rien de comparable à ce qui existe.
  • Oh, ce serait beau. Merci.
  • En c++, ce serait assez facile de s'exprimer en tant que return x ? x.y : NULL. Yay pour la conversion de types de pointeur de booléens!
  • c'est une des choses qui m'énerve le plus dans le C#, c'est qu'ils n'ont pas suivi le C si si(n'importe quoi) = vrai, sauf quand il est si(0, false, null)
  • ce n'est pas une déclaration exacte de C. Si vous avez un non-variable scalaire (comme une structure (struct), vous ne pouvez pas l'utiliser dans une condition.
  • Si elle était mise en œuvre, je pense qu'une bonne syntaxe serait x ?=> y: retourner la valeur null si x est nul, sinon retourner y
  • Suggestions: return x == null ? null : Whatever(x);: visualstudio.uservoice.com/forums/121579-visual-studio/... return x == null ? null : x.Property;: visualstudio.uservoice.com/forums/121579-visual-studio/...

InformationsquelleAutor Jay | 2010-05-28