Eh bien, ce n'est pas tout à fait la même chose que le conditional operator, mais je pense que vous pensez de la null coalescing operator (??). (Je suppose que vous avez dit qu'il était "similaire" :) Notez que "ternaire" se réfère simplement au nombre d'opérandes que l'opérateur est - donc si l'opérateur conditionnel est un opérateur ternaire, l'opérateur de coalescence nul est un opérateur binaire.
Il prend généralement la forme suivante:
result = first ?? second;
ici second
ne sera évaluée que si first
est nulle. Il ne doit pas être la cible d'une affectation - vous pouvez l'utiliser pour évaluer un argument de méthode, par exemple.
Notez que le premier opérande a la valeur pour être nullable - mais le second ne l'est pas. Bien qu'il existe des détails spécifiques sur les conversions, dans le cas simple, le type de l'expression globale est le type du deuxième opérande. En raison de l'associativité, vous pouvez empiler les utilisations de l'opérateur proprement aussi:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
Notez comment x
et y
sont annulable, mais z
et result
ne sont pas. Bien sûr, z
pourrait être nul, mais alors result
devrait également être nul.
Fondamentalement, les opérandes seront évalués dans l'ordre où ils apparaissent dans le code, avec l'évaluation s'arrêtant quand il trouve une valeur non nulle.
Oh, et bien que ce qui précède soit indiqué en termes de types de valeur, il fonctionne également avec les types de référence (qui sont toujours).
Copie possible -> http: // stackoverflow.com/questions/463155/how-does-the-ternary-operator-work –
@Junior mais c'est à propos de l'opérateur ternaire alors qu'il s'agit de l'opérateur de coalescence (malgré le titre) – Rup
@Junior, alors que le titre de ma question est un peu trompeur si vous lisez ma question, vous verrez que cela n'a rien à voir avec le doublon que vous avez suggéré. –