Lorsque vous utilisez le ??
opérateur en C #, court-il le court-circuit si la valeur testée n’est pas nulle?
Exemple:
ssortingng test = null; ssortingng test2 = test ?? "Default"; ssortingng test3 = test2 ?? test.ToLower();
La ligne test3 réussit-elle ou lève-t-elle une exception de référence null?
Donc, une autre façon de poser la question: l’expression de droite ?? opérateur est évalué si la main gauche n’est pas nulle?
Oui, c’est indiqué dans la spécification du langage C # (mise en évidence par moi):
Une expression coalescente nulle de la forme
a ?? b
a ?? b
exigea
soit d’un type nullable ou d’un type référence. Sia
est non nul, le résultat dea ?? b
a ?? b
esta
; sinon, le résultat estb
. L’opération évalueb
uniquement sia
est null.
Oui, ça court-circuite.
class Program { public static void Main() { ssortingng s = null; ssortingng s2 = "Hi"; Console.WriteLine(s2 ?? s.ToSsortingng()); } }
Le programme ci-dessus NullReferenceException
“Hi” plutôt que de lancer une NullReferenceException
.
Oui.
public Form1() { ssortingng ssortingng1 = "test" ?? test(); MessageBox.Show(ssortingng1); } private ssortingng test() { MessageBox.Show("does not short circuit"); return "test"; }
Si ce n’est pas un court-circuit, test () sera appelé et une boîte de message indiquera qu’il “ne court-circuite pas”.