c# - unario - operadores relacionales c sharp
Hace c#?? operador de corto circuito? (3)
Cuando se utiliza el ??
operador en C #, ¿está en cortocircuito si el valor que se está probando no es nulo?
Ejemplo:
string test = null;
string test2 = test ?? "Default";
string test3 = test2 ?? test.ToLower();
¿Tiene éxito la línea test3 o lanza una excepción de referencia nula?
Así que otra forma de formular la pregunta: ¿Será la expresión de la mano derecha de? ¿Se evalúa al operador si la mano izquierda no es nula?
Sí, lo dice en la Especificación de lenguaje C # (resaltado por mí):
Una expresión nula coalescente de la forma
a ?? b
a ?? b
requiere que sea de tipo anulable o tipo de referencia. Sia
no es nulo, el resultado dea ?? b
a ?? b
esa
De lo contrario, el resultado esb
. La operación evalúab
solo sia
es nulo.
Sí, se cortocircuita.
class Program
{
public static void Main()
{
string s = null;
string s2 = "Hi";
Console.WriteLine(s2 ?? s.ToString());
}
}
El programa anterior genera "Hola" en lugar de lanzar una NullReferenceException
.
Sí.
public Form1()
{
string string1 = "test" ?? test();
MessageBox.Show(string1);
}
private string test()
{
MessageBox.Show("does not short circuit");
return "test";
}
Si no fuera un cortocircuito, se llamaría a test () y un cuadro de mensaje mostraría que "no cortocircuita".