L’opérateur conditionnel
L'opérateur conditionnel (également appelé opérateur ternaire) permet de d'évaluer une condition et ensuite d'évaluer l'une ou l'autre des parties pour en retourner le résultat. La syntaxe est z ? x : y
Donc dans l'exemple ci-dessous, si la condition est (a==1) est vraie, x sera égal à 1 sinon il sera égal à 0.
int x = (a==1) ? 1 : 0;
Le premier opérande de l'opérateur conditionnel (a==1) doit être une expression d'un type qui peut être converti implicitement en bool ou une expression d'un type qui implémente operator true.
Le type de l’expression conditionnel est déterminé par le deuxième et troisième opérande. En se base sur le modèle suivant :
- Si y et z sont du même type, il s'agit alors du type de l'expression conditionnelle.
- Sinon, s'il existe une conversion implicite de X en Y, mais pas de Y en X, Y est alors le type de l'expression conditionnelle.
- Sinon, s'il existe une conversion implicite de Y en X, mais pas de X en Y, X est alors le type de l'expression conditionnelle.
- Sinon, le type d'expression ne peut pas être déterminé et une erreur de compilation se produit.
Voir documentation sur MSDN http://msdn.microsoft.com/fr-fr/library/aa691313(v=vs.71).aspx
Donc au lieu d’écrire une expression tel que :
string GetValueName(int value){if (value == 1)}return "Value 1";elsereturn "Value 2";
On peu tout simplement écrire :
string GetValueName(int value){return (value == 1) ? "Value 1" : "Value 2";}
L’opérateur de nulle coalescence
Tout d'abord, le mot coalescence signifie grossièrement « Unir 2 parties en une seule, fusionner ». L’opérateur de nulle coalescence vérifie si le premier opérande est non null, si c’est le cas cette valeur est retournée, sinon c’est la valeur du deuxième opérande qui est retourné. La syntaxe est x ?? y
Donc dans l'exemple ci-dessous, si la condition est la variable age n’égale pas à null, la fonction GetAge retournera la valeur de age, sinon elle retournera 0.
int GetAge(Nullable age){return age ?? 0;}
Vous remarquerez également que la conversion age (Nullable