Est-ce que c # ?? court-circuit opérateur?

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 exige a soit d’un type nullable ou d’un type référence. Si a est non nul, le résultat de a ?? b a ?? b est a ; sinon, le résultat est b . L’opération évalue b uniquement si a 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”.